在Linux下创建发布质量图的最简单方法是什么?


17

我们可能假设我们有CSV文件,我们想要一个非常基本的线图,其中一个图上有多条线,并且有一个简单的图例。


2
您如何定义“出版物质量”?请详细说明您希望看到哪些方面的内容,例如颜色使用,线条宽度等。答案应该集中在字体大小上吗?
Egon Willighagen

Answers:


14

最简单的方法是使用R

用于read.csv将数据输入到R中,然后使用plotline命令的组合

如果您想要一些特别的东西,请查看库ggplot2lattice

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或postscript文件:

#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()

保存到文件怎么样?
卢卡斯卢

1
或更简洁的融化和qplot:m <- melt(d, id = "x"); qplot(variable, value, data = m, colour = variable)
hadley 2010年

实际上,更简单的方法是将R + ducer与ggplot2结合使用(此版本有一个新版本,该版本将在未来几个月内推出。目前有beta版)
Tal Galili 2010年

4
很好的例子,但情节几乎没有出版质量。或至少我没有发表的期刊都接受它。
Matti Pastell'7

3
“很难出版质量” ????我意识到这并不完美-短语“ ...您应该开始吧..”涵盖了这一点。但是再做一点额外的工作,即轴标签,我会说很好。顺便说一句,您出版什么期刊?
csgillespie 2010年

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)

如何将其发布?
卢卡斯卢

5
R产生一些最佳质量的图形。作为一个国际研究杂志的编辑,我希望所有的作者们使用R.
罗布·海德门

1
..看到我对这个问题的评论...从编辑角度来看,您如何定义“出版质量”或“最佳质量”?
Egon Willighagen

19
我喜欢看矢量图形(无jpeg),遵循Tufte&Cleveland原理的图形设计,可读字体,整洁的图例,无阴影的背景,有意义的轴限制和刻度间隔,标记的轴,文本没有重叠以及绘制字符或线条等等。大多数作者使用其软件的默认设置,因此好的软件具有好的默认值。这是Excel惨败的地方,R表现很好。但是可以在R中生成糟糕的图,而在Excel中生成好的图。它只是更容易产生R.高品质的图形
罗布·海德门

12

R绝对是答案。我要补充一下罗布和科林已经说过的话:

为了提高您的绘图质量,您应该考虑使用开罗的输出设备。这将大大提高最终图形的质量。您只需在绘制之前调用该函数,然后它将重定向到开罗作为输出设备。

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
与使用Cairo生成位图图像相比,将图形另存为矢量可能更好,这是与分辨率无关的,因此在调整大小时看起来更好,并且始终适合打印分辨率-我喜欢svg,可以使用inkscape轻松地对其进行编辑。
naught101 '04

10

我最喜欢的工具是带有mathplotlib的 Python

优点:

  • 立即从我在其中进行实验的环境中导出
  • 支持scipy / numpy数据结构
  • 熟悉的语法/选项(matlab背景)
  • 完整的乳胶支持标签/图例等。与您文档的其余部分一样的排版!

具体来说,对于svg和eps等不同的文件格式,请使用savefig的format参数

示例: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嗯,关于如何上传svg图的一些建议?
Peter Smit

4
您可能已经在答案中提到过,matplotlib允许使用LaTeX渲染图中的所有版式,因此它在视觉上完美集成。
本杰明·班尼尔

我想知道为什么尚未将matplotlib集成到R中吗?
naught101'2012-4-20

6

看一下三个流行的可视化库的样本库:

对于前两个,您甚至可以查看相关的源代码-简单的东西很简单,代码行不多。预熔案例将具有必需的Java样板代码。所有这三个都支持许多后端/设备/渲染器(pdf,ps,png等)。这三者显然都具有高质量的图形能力。

我认为这可以归结为您最喜欢使用哪种语言。



1

容易是相对的。除非您知道如何使用它,否则任何工具都不容易。某些工具起初看起来可能比较困难,但是一旦掌握了它们,即可为您提供更多细粒度的控制。

我最近开始在pgfplots中进行绘图。作为LaTeX软件包(位于之上tikz),它特别擅长使事物看起来不错。字体将与文档的其余部分保持一致,并且在视觉上集成绘图更加容易。这不是制作图的最简单的方法,但它是制作肯定具有出版质量的图的相当简单的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.