ggplot2如何在直方图中找到计数的最大值?

11

我有一个简短的R脚本,使用ggplot2绘制了几个直方图。如何根据直方图中最大频率(加上10%)自动设置直方图的最大y轴限制?

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))
2个回答

35
例如使用的数据样本movies并未提供。
使用函数ggplot_build()可以获取包含用于绘制数据的所有元素的列表。 所有数据都在列表元素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))

这里输入图片描述


ggplot_build(plot)$data[[1]] 给我非常不同的输出 - [,1] [1,] 列表,12 - moadeep
@moadeep,请在您的问题中更新示例数据,以便能够重现您的情况。此外,此图是使用ggplot2版本0.9.3制作的。 - Didzis Elferts
以上是我从您在答案中输入的命令中得到的输出。 - moadeep
@moadeep,你使用的ggplot2版本是多少? - Didzis Elferts
我之前使用的是较旧版本的ggplot2。感谢您提供的优雅解决方案。 - moadeep
请注意,此方法也适用于加权直方图,而常规的“hist()”解决方案则不行。GGplot加权直方图使用一个变量作为x轴/分箱,另一个变量用于计数。例如:qplot(wt,data=mtcars,geom="freqpoly",weight=mpg) - zach

2

就个人而言,我认为“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'函数时,所以当我只想要数据时,我更喜欢直接调用它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接