2013-02-20 173 views
2

我尝试在同一平面上叠加两个直方图,但hist()中的选项Probability = TRUE(相对频率)对下面的代码无效。这是一个问题,因为这两个样本的尺寸(长度(cl1)= 9和长度(cl2)= 339)有很大不同,并且通过这个脚本,我不能夸大两个直方图之间的差异,因为每个都显示频率。我怎样才能用相同的箱宽重叠两个直方图,显示相对频率?用R绘制直方图; y轴始终从比例/概率变为频率

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

示例数据将有所帮助 – russellpierce 2013-02-20 14:31:29

+0

将来,请dput()重现您的问题所需的相关对象。 – russellpierce 2013-02-20 15:03:40

回答

6

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

freq逻辑;如果为TRUE,则直方图图形将呈现频率的表示,即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开发者的部分监督/特质决定(或缺乏)。值得赞扬的是,它被恰当地记录下来,并不是“意外的行为”(尽管我当然没有想到它)。我想知道应该报告这种奇怪的情况,如果它应该报告的话。

+0

太棒了!它完美的作品。谢谢。 – Lio 2013-02-20 15:22:37

+0

@Lio:很高兴听到。您能否将答案标记为已接受? (复选标记)。 – russellpierce 2013-02-20 16:04:54