2

我正在编写R脚本,这些脚本在我从终端执行的一系列命令中只起很小的作用。基本上,我在 Python 脚本中进行大部分数据操作,然后将输出通过管道传输到我的 R 脚本进行绘图。因此,我从终端执行类似于$python whatever.py | R CMD BATCH do_some_plotting.R. 到目前为止,这个工作流程对我来说一直运行良好,尽管我现在已经到了一个地步,我想在同一个图上叠加多个直方图,这是受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)原始图 - 此图处于测试阶段
iii)直方图d$minus_thirty_minutes

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

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

4

1 回答 1

2

您的问题是hist默认情况下绘图,不可见地返回可以绘制的直方图对象。因此,调用plot(hist(..))两次绘制直方图(您的 2 页pdf),add=T在第二次调用中使用意味着创建了第三个而不是第四个图。您可以设置plot = FALSE或不将调用包装到histinside plot()

为了让它作为单页 pdf 工作(使用如何在 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()
于 2012-12-18T05:20:34.860 回答