我正在编写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
的解决方案,或者我是否必须将我的数据传输到不同的语言/绘图引擎。
答案 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()