用R绘制直方图; y轴从比例/概率不断变化到频率

时间:2013-02-20 14:19:37

标签: r histogram

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

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)

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:6)

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

  

频率逻辑;如果为TRUE,则直方图图形将显示a   频率表示,即x$counts;如果假,相对   绘制频率(概率),即x $密度。默认   对于等距休息是正确的,否则就是假的。

因此,当绘图呈现直方图时,它不使用先前指定的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开发者的疏忽/特殊决定(或缺乏)。值得赞扬的是,它是适当记录的,并非“意外行为”(尽管我当然没想到)。我想知道应该报告这种奇怪的地方,是否应该报告。