将单个绘图上的多个直方图绘制为.pdf作为R批处理脚本的一部分

时间:2012-12-18 05:01:39

标签: r plot

我正在编写R脚本,这些脚本在我从终端执行的一系列命令中扮演一个小角色。基本上,我在Python脚本中执行大部分数据操作,然后将输出传输到我的R脚本以进行绘图。所以,从终端我执行看起来像$python whatever.py | R CMD BATCH do_some_plotting.R的命令。到目前为止,这个工作流程对我来说一直很好,尽管我现在已经达到了一个点,我希望在同一个绘图上叠加多个直方图,灵感来自this answer到另一个用户关于Stackoverflow的问题。

在我的R脚本中,我的绘图代码如下所示:

pdf("my_output.pdf")
plot(hist(d$original,breaks="FD",prob=TRUE), col=rgb(0,0,1,1/4),xlim=c(0,4000),main="original - This plot is in beta")
plot(hist(d$minus_thirty_minutes,breaks="FD",prob=TRUE), col=rgb(1,0,0,1/4),add=T,xlim=c(0,4000),main="minus_thirty_minutes - This plot is in beta")

值得注意的是,我正在使用add=T,这可能是为了指定第二个图应该叠加在第一个图之上。当我的脚本完成后,我得到的结果是两个直方图叠加在一起,而是一个3页的PDF,其中3个单独的图包含标题:

i) d$original 的直方图 ii) original - 此剧情为测试版 iii) d$minus_thirty_minutes

的直方图

所以这里有两点我想澄清一下。首先,即使这些图没有重叠,我也希望只有2页PDF,而不是3页PDF。有人可以解释为什么我得到一个3页的PDF?其次,我是否可以在某处进行修正以获得两个直方图,并将它们放在同一个图上(即1页PDF)?

我在第一段中链接到的另一个Stackoverflow问题/答案确实提到所有设备都不支持alpha混合,所以我很好奇这是否与它有关。无论哪种方式,最好知道我的问题是否有基于R的解决方案,或者我是否必须将我的数据传输到不同的语言/绘图引擎。

1 个答案:

答案 0 :(得分:2)

您的问题是默认情况下hist绘图,无形地返回可以绘制的直方图对象。所以调用plot(hist(..))绘制直方图两次(pdf中的两页),在第二次调用中使用add=T意味着创建了第三个但不是第四个绘图。您可以设置plot = FALSE,或者不将hist内的来电包裹在plot()内。

要使其作为单页pdf工作(使用How to plot two histograms together in R?

中的示例
set.seed(42)
p1 <- hist(rnorm(500,4), plot=  FALSE)                     # centered at 4
p2 <- hist(rnorm(500,6), plot = FALSE)    
                                             # centered at 6
pdf('foo.pdf')
plot( p1, col=rgb(0,0,1,1/4), xlim=c(0,10))  # first histogram
plot( p2, col=rgb(1,0,0,1/4), xlim=c(0,10), add=T)

dev.off()