2

同じ平面で 2 つのヒストグラムを重ね合わせようとしましたが、hist() のオプション Probability=TRUE (相対頻度) は以下のコードでは効果がありません。2 つのサンプルのサイズが大きく異なる (長さ (cl1) = 9 と長さ (cl2) = 339) ため、これは問題です。このスクリプトでは、それぞれが度数を示しているため、両方のヒストグラムの違いを視覚化できません。ビン幅が同じ 2 つのヒストグラムを重ねて相対度数を表示するにはどうすればよいですか?

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

クラス histogram のオブジェクト (c1 など) で plot を呼び出すと、ヒストグラムの S3 メソッドが呼び出されます。つまり、plot.histogram. 入力すると、この関数のコードgraphics:::plot.histogramが表示され、ヘルプは の下に表示され?plot.histogramます。その関数のヘルプ ファイルには次のように記載されています。

周波数論理; TRUE の場合、ヒストグラム グラフィックは頻度の表現を表しx$countsます。FALSE の場合、相対頻度 (確率)、つまり x$density がプロットされます。デフォルトは、等距離ブレークの場合は true で、それ以外の場合は false です。

そのため、plot がヒストグラムをレンダリングするとき、以前に指定されたprobabilityorfreq引数を使用せず、それ自体を把握しようとします。この理由は、内部を掘り下げると明らかです。c1プロットに必要なすべてのデータが含まれていますが、レンダリング方法は指定されていません。

freq=FALSEしたがって、解決策は、プロット関数を実行するときに引数を繰り返すことです。特に、確率オプションがないためfreq=FALSE機能しますが、機能しません。したがって、プロット コードは次のようになります。probability=TRUEplot.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 に答える