2

我尝试在同一平面上叠加两个直方图,但 hist() 中的选项 Probability=TRUE(相对频率)对下面的代码无效。这是一个问题,因为这两个样本的大小非常不同(长度(cl1)=9 和长度(cl2)=339),并且使用此脚本,我无法可视化两个直方图之间的差异,因为每个直方图都显示频率。如何重叠两个具有相同 bin 宽度的直方图,显示相对频率?

c1<-hist(dataList[["cl1"]],xlim=range(minx,maxx),breaks=seq(minx,maxx,pasx),col=rgb(1,0,0,1/4),main=paste(paramlab,"Group",groupnum,"cl1",sep=" "),xlab="",probability=TRUE) 
c2<-hist(dataList[["cl2"]],xlim=range(minx,maxx),breaks=seq(minx,maxx,pasx),col=rgb(0,0,1,1/4),main=paste(paramlab,"Group",groupnum,"cl2",sep=" "),xlab="",probability=TRUE)
plot(c1, col=rgb(1,0,0,1/4), xlim=c(minx,maxx), main=paste(paramlab,"Group",groupnum,sep=" "),xlab="")# first histogram
plot(c2, col=rgb(0,0,1,1/4), xlim=c(minx,maxx), add=T)
cl1Col <- rgb(1,0,0,1/4)
cl2Col <- rgb(0,0,1,1/4)
legend('topright',c('Cl1','Cl2'),
fill = c(cl1Col , cl2Col ), bty = 'n',
border = NA)

在此先感谢您的帮助!

4

1 回答 1

6

当您在类直方图(如 c1)的对象上调用 plot 时,它会调用直方图的 S3 方法。即,plot.histogram。如果您键入,您可以看到此函数的代码,graphics:::plot.histogram您可以在 下查看它的帮助?plot.histogram。该函数的帮助文件指出:

频率逻辑; 如果为TRUE,直方图图形将呈现频率的表示,即x$counts;如果为 FALSE,则绘制相对频率(概率),即 x$density。对于等距中断,默认值为 true,否则为 false。

因此,当 plot 呈现直方图时,它不使用先前指定的probabilityfreq参数,它会尝试自己找出答案。如果您在里面挖掘,其原因很明显c1,它包含绘图所需的所有数据,但没有指定应该如何渲染。

freq=FALSE因此,解决方案是在运行绘图函数时重申该论点。值得注意的是,freq=FALSE有效而probability=TRUE无效,因为plot.histogram没有概率选项。所以,你的情节代码将是:

plot(c1, col=rgb(1,0,0,1/4), xlim=c(minx,maxx), main=paste(paramlab,"Group",groupnum,sep=" "),xlab="",freq=FALSE)# first histogram
plot(c2, col=rgb(0,0,1,1/4), xlim=c(minx,maxx), add=T, freq=FALSE)

这一切似乎都是 R 开发人员的疏忽/特殊决定(或缺乏决定)。值得称赞的是,它被适当地记录在案并且不是“意外行为”(尽管我当然没想到)。我不知道应该在哪里报告这种奇怪的事情,如果应该报告的话。

于 2013-02-20T14:53:04.927 回答