9

ggplot2を使用していくつかのヒストグラムをプロットする短いRスクリプトがあります。ヒストグラムの最大頻度(プラス10%)に基づいて、ヒストグラムのymax制限を自動的に設定するにはどうすればよいですか?

scale_y_continuous(limits= c(0,ymax*1.1)

plot = ggplot(data, aes(myo_activity)) +
  geom_histogram(binwidth=0.5, aes(fill=..count..))
plot + scale_x_continuous(expand = c(0,0), limits = c(30,90)) + 
  scale_y_continuous(expand = c(0,0), limits = c(0,140))
4

2 に答える 2

31

たとえばmovies、サンプル データとして使用されるデータは提供されません。

関数ggplot_build()を使用すると、データのプロットに使用されるすべての要素を含むリストを取得できます。すべてのデータは list element にありdata[[1]]ます。countこの要素の列には、ヒストグラムの値が含まれます。この列の最大値を使用して、プロットの制限を設定できます。

plot = ggplot(movies, aes(rating)) + geom_histogram(binwidth=0.5, aes(fill=..count..))
ggplot_build(plot)$data[[1]]
      fill    y count     x     ndensity       ncount      density PANEL group ymin ymax xmin xmax
1  #132B43    0     0  0.75 0.0000000000 0.0000000000 0.0000000000     1     1    0    0  0.5  1.0
2  #142E48  272   272  1.25 0.0323232323 0.0323232323 0.0092535892     1     1    0  272  1.0  1.5
3  #16314B  454   454  1.75 0.0539512775 0.0539512775 0.0154453290     1     1    0  454  1.5  2.0
4  #17344F  668   668  2.25 0.0793820559 0.0793820559 0.0227257263     1     1    0  668  2.0  2.5
5  #1B3A58 1133  1133  2.75 0.1346405229 0.1346405229 0.0385452813     1     1    0 1133  2.5  3.0

plot + scale_y_continuous(expand = c(0,0),
         limits=c(0,max(ggplot_build(plot)$data[[1]]$count)*1.1))

ここに画像の説明を入力

于 2013-01-29T13:51:32.860 に答える
2

個人的には、この種の計算には「hist」関数が最も役立つと思います。「hist」関数は超高速で、頻度カウントを提供できます。あなたの場合、次のようなことができます:

max(hist(data$myo_activity, breaks=seq(range_Min, range_Max, by=bin_Width), plot=FALSE)$counts)

は理論range_Min上の範囲の下限 (つまり 0) であり、range_Maxは理論上の範囲を超える上限です。 bin_Width各頻度カウントの値幅です。

方程式は、プロット範囲を指定するために必要な最大値を与えるはずです。とにかく「ggplot」関数は「hist」関数を呼び出していると思うので、データのみが必要な場合は直接呼び出すことを好みます。

于 2013-01-29T14:59:44.477 に答える