วิธีที่ง่ายที่สุดในการสร้างแปลงคุณภาพการเผยแพร่ภายใต้ Linux คืออะไร


17

เราอาจสมมติว่าเรามีไฟล์ CSV และเราต้องการพล็อตบรรทัดขั้นพื้นฐานที่มีหลายบรรทัดในหนึ่งพล็อตและคำอธิบายง่ายๆ


2
คุณกำหนด 'คุณภาพการตีพิมพ์' ได้อย่างไร โปรดอธิบายอย่างละเอียดเกี่ยวกับแง่มุมที่คุณต้องการดูที่ครอบคลุม ... เช่นการใช้สีความกว้างของบรรทัด ฯลฯ ควรตอบคำถามโดยเน้นที่ขนาดตัวอักษรแทน?
Egon Willighagen

คำตอบ:


14

วิธีที่ง่ายที่สุดคือใช้ R

ใช้read.csvเพื่อป้อนข้อมูลลงใน R จากนั้นใช้การรวมกันของคำสั่งplotและline

ถ้าคุณต้องการบางสิ่งบางอย่างที่พิเศษจริงๆแล้วมองไปที่ห้องสมุดggplot2หรือตาข่าย

ในggplot2คำสั่งต่อไปนี้ควรให้คุณเริ่มต้น

require(ggplot2)
#You would use read.csv here
N = 10
d = data.frame(x=1:N,y1=runif(N),y2=rnorm(N), y3 = rnorm(N, 0.5))
p = ggplot(d)

p = p+geom_line(aes(x, y1, colour="Type 1"))
p = p+geom_line(aes(x, y2, colour="Type 2"))
p = p+geom_line(aes(x, y3, colour="Type 3"))
#Add points
p = p+geom_point(aes(x, y3, colour="Type 3"))
print(p)   

นี่จะให้พล็อตต่อไปนี้แก่คุณ:

พล็อตบรรทัด http://img84.imageshack.us/img84/6393/tmpq.jpg

ออมทรัพย์แปลงใน R

แผนการแปลงใน R นั้นตรงไปตรงมา:

#Look at ?jpeg to other different saving options
jpeg("figure.jpg")
print(p)#for ggplot2 graphics
dev.off()

แทนที่จะjpegเป็นคุณยังสามารถบันทึกเป็นpdfไฟล์หรือคำลงท้าย:

#This example uses R base graphics
#Just change to print(p) for ggplot2
pdf("figure.pdf")
plot(d$x,y1, type="l")
lines(d$x, y2)
dev.off()

วิธีการเกี่ยวกับการบันทึกเป็นไฟล์?
Łukasz Lew

1
หรือเพิ่มอีกนิดโดยสังเขปละลายและ qplot:m <- melt(d, id = "x"); qplot(variable, value, data = m, colour = variable)
hadley

ที่จริงแล้ววิธีที่ง่ายยิ่งขึ้นคือการใช้ R + deducer กับ ggplot2 (มีการเปิดตัวใหม่ซึ่งกำลังจะออกมาในอีกไม่กี่เดือนข้างหน้าปัจจุบันมีเบต้าให้บริการ)
Tal Galili

4
ตัวอย่างที่ดี แต่พล็อตมีคุณภาพการโฆษณาแทบจะไม่ หรืออย่างน้อยไม่มีวารสารที่ฉันตีพิมพ์ในจะยอมรับมัน
Matti Pastell

3
"คุณภาพสิ่งพิมพ์แทบจะไม่" ???? ฉันรู้ว่ามันไม่สมบูรณ์แบบ - วลี "... หากคุณเริ่มต้น ... " ครอบคลุมถึงส่วนนั้น แต่ด้วยการทำงานเพิ่มเติมเล็กน้อยเช่นป้ายกำกับแกนฉันจะบอกว่าใช้ได้ BTW คุณตีพิมพ์ในวารสารอะไร
csgillespie

13

มันยากที่จะผ่าน R สำหรับกราฟิก คุณสามารถทำสิ่งที่คุณต้องการใน 3 บรรทัด ตัวอย่างเช่นสมมติว่าไฟล์ csv มีสี่คอลัมน์:

x <- read.csv("file.csv")
matplot(x[,1],x[,2:4],type="l",col=1:3)
legend("topleft",legend=c("A","B","C"),lty=1,col=1:3)

วิธีการเกี่ยวกับการวางไว้ในสิ่งพิมพ์?
Łukasz Lew

5
R สร้างกราฟิคคุณภาพที่ดีที่สุดรอบ ๆ ในฐานะบรรณาธิการของวารสารวิจัยระดับนานาชาติฉันจะรักนักเขียนของเราทุกคนที่จะใช้ R.
Rob Hyndman

1
.. ดูความคิดเห็นของฉันในคำถาม ... คุณจะกำหนด 'คุณภาพการตีพิมพ์' หรือ 'คุณภาพที่ดีที่สุด' ได้อย่างไร ... จากมุมมองบรรณาธิการ
Egon Willighagen

19
ฉันชอบที่จะเห็นกราฟิกแบบเวกเตอร์ (ไม่มี jpegs), การออกแบบกราฟิกตามหลักการของ Tufte & Cleveland, แบบอักษรที่อ่านได้, ตำนานที่กระจายตัว, ไม่มีพื้นหลังที่แรเงา, ขีด จำกัด แกนที่สมเหตุสมผล เป็นต้นผู้เขียนส่วนใหญ่ใช้การตั้งค่าเริ่มต้นของซอฟต์แวร์ดังนั้นซอฟต์แวร์ที่ดีจึงมีค่าเริ่มต้นที่ดี นี่คือที่ Excel ล้มเหลวอย่างน่าสังเวชและ R ทำได้ค่อนข้างดี แต่เป็นไปได้ที่จะสร้างกราฟหมัดใน R และกราฟที่ดีใน Excel มันง่ายกว่าที่จะสร้างกราฟิกคุณภาพสูงใน R.
Rob Hyndman

12

R เป็นคำตอบที่แน่นอน ฉันจะเพิ่มสิ่งที่ Rob และ Colin พูดไปแล้ว:

เพื่อปรับปรุงคุณภาพของแปลงของคุณคุณควรพิจารณาการใช้ไคโรแพคเกจสำหรับอุปกรณ์เอาท์พุท นั่นจะช่วยปรับปรุงคุณภาพของกราฟิกขั้นสุดท้ายอย่างมาก คุณเพียงเรียกฟังก์ชั่นก่อนที่จะลงจุดและมันจะเปลี่ยนเส้นทางไปยังกรุงไคโรเป็นอุปกรณ์ส่งออก

Cairo(600, 600, file="plot.png", type="png", bg="white")
plot(rnorm(4000),rnorm(4000),col="#ff000018",pch=19,cex=2) # semi-transparent red
dev.off() # creates a file "plot.png" with the above plot

สุดท้ายในแง่ของการวางไว้ในสิ่งพิมพ์นั่นคือบทบาทที่Sweaveเล่น มันทำให้การรวมแปลงกับกระดาษของคุณเป็นการดำเนินการเล็กน้อย (และมีประโยชน์เพิ่มเติมจากการทิ้งคุณไว้กับบางสิ่งที่สามารถทำซ้ำได้และเข้าใจได้) ใช้cacheSweaveถ้าคุณมีการคำนวณระยะยาว


2
อาจจะดีกว่าการใช้ไคโรในการผลิตภาพบิตแมปคือการบันทึกกราฟเป็นพาหะซึ่งมีความละเอียดอิสระดังนั้นดูดีขึ้นเมื่อมีการปรับขนาดและมักจะละเอียดในการพิมพ์ชุดสูท - ฉันชอบ SVG ซึ่งสามารถแก้ไขได้ด้วยInkscape
naught101

10

เครื่องมือที่ฉันชอบคือ Python mathplotlib

ข้อดี:

  • ส่งออกทันทีจากสภาพแวดล้อมที่ฉันทำการทดลอง
  • สนับสนุนโครงสร้างข้อมูล scipy / numpy
  • ไวยากรณ์ / ตัวเลือกที่คุ้นเคย (พื้นหลัง matlab)
  • การรองรับน้ำยางเต็มรูปแบบสำหรับฉลาก / ตำนานเป็นต้นดังนั้นการเรียงพิมพ์แบบเดียวกับที่เหลือในเอกสารของคุณ!

สำหรับรูปแบบไฟล์ที่แตกต่างกันเช่น svg และ eps ให้ใช้พารามิเตอร์ format ของ savefig

ตัวอย่าง: input.csv

"บรรทัด 1", 0.5,0.8,1.0,0.9,0.9
"บรรทัด 2", 0.2,0.7,1.2,1.1,1.1

รหัส:

import csv
import matplotlib.pyplot as plt

legends = []
for row in csv.reader(open('input.csv')):
    legends.append(row[0])
    plt.plot(row[1:])

plt.legend(legends)
plt.savefig("out.svg", format='svg')

คุณสามารถวางโค้ดขนาดสั้นเพื่อความสมบูรณ์ได้หรือไม่ มันจะมีประโยชน์มากสำหรับคนในอนาคตในการค้นหาหน้านี้
Łukasz Lew

@ Łukaszอืมคำแนะนำบางอย่างเกี่ยวกับวิธีอัพโหลดรูป svg?
Peter Smit

4
คุณสามารถพูดถึงคำตอบของคุณได้ว่า matplotlib ให้การแสดงผลการพิมพ์ทั้งหมดในพล็อตด้วย LaTeX ดังนั้นจึงสามารถผสานการมองเห็นได้อย่างสมบูรณ์แบบ
Benjamin Bannier

ฉันสงสัยว่าทำไม matplotlib ยังไม่ได้รวมเข้ากับ R หรือยัง
naught101

6

ดูแกลเลอรีตัวอย่างสำหรับห้องสมุดการสร้างภาพยอดนิยมสามแห่ง:

สำหรับสองคนแรกคุณยังสามารถดูซอร์สโค้ดที่เชื่อมโยงได้ - สิ่งที่ง่ายคือง่าย ๆ ไม่ได้มีหลายบรรทัด กรณี prefuse จะมีรหัส Java boilerplate ที่จำเป็น ทั้งสามรองรับแบ็กเอนด์ / อุปกรณ์ / renderers จำนวนมาก (pdf, ps, png, ฯลฯ ) ทั้งสามมีความสามารถชัดเจนของกราฟิกคุณภาพสูง

ฉันคิดว่าภาษาของคุณน่าจะใช้งานได้ดีที่สุด



1

ง่ายเป็นญาติ ไม่มีเครื่องมือใดที่ง่ายจนกว่าคุณจะรู้วิธีใช้งาน เครื่องมือบางอย่างอาจดูยากขึ้นในตอนแรก แต่ให้การควบคุมที่ละเอียดยิ่งขึ้นแก่คุณเมื่อคุณเชี่ยวชาญ

ฉันได้เริ่มต้นเมื่อเร็ว ๆ นี้ที่จะทำให้แผนการของฉันในpgfplots เป็นแพคเกจ LaTeX (ด้านบนของtikz) มันเป็นสิ่งที่ดีโดยเฉพาะอย่างยิ่งในการทำสิ่งที่ดูดี แบบอักษรจะสอดคล้องกับส่วนที่เหลือของเอกสารและง่ายกว่ามากในการรวมแปลงของคุณทางสายตา ไม่ใช่ตัวเลือกที่ง่ายที่สุดในการแปลง แต่เป็นวิธีที่ง่ายในการแปลงที่มีคุณภาพการตีพิมพ์อย่างแน่นอน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.