首页 文章

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

提问于
浏览
2

我尝试在同一平面上叠加两个直方图,但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 回答

  • 6

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

    频率逻辑;如果为TRUE,则直方图图形表示频率的表示,即x $计数;如果为FALSE,则绘制相对频率(概率),即x $密度 . 等距中断的默认值为true,否则为false .

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

相关问题