我尝试在同一平面上叠加两个直方图,但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)
提前感谢您的帮助!
答案 0 :(得分:6)
当您在类直方图的对象(如c1)上调用plot时,它会调用直方图的S3方法。即,plot.histogram
。如果您键入graphics:::plot.histogram
,则可以看到此功能的代码,您可以在?plot.histogram
下看到它的帮助。该函数的帮助文件指出:
频率逻辑;如果为TRUE,则直方图图形将显示a 频率表示,即
x$counts
;如果假,相对 绘制频率(概率),即x $密度。默认 对于等距休息是正确的,否则就是假的。
因此,当绘图呈现直方图时,它不使用先前指定的probability
或freq
参数,它会尝试自己解决它。如果你在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开发者的疏忽/特殊决定(或缺乏)。值得赞扬的是,它是适当记录的,并非“意外行为”(尽管我当然没想到)。我想知道应该报告这种奇怪的地方,是否应该报告。