如何获取ggplot2中geom_histogram生成直方图的分箱中点与密度值
从ggplot2直方图获取分箱中点、密度值的方法
完全可以获取到对应的数据,有两种常用实现方式:
方法1:从已绘制的ggplot直方图对象中提取
你可以直接调用ggplot_build()函数提取绘图的底层数据,示例代码如下:
# 加载包 library(ggplot2) # 示例数据 x <- rnorm(1000) # 绘制密度直方图,将绘图结果赋值给对象p p <- ggplot(data.frame(x = x), aes(x = x)) + geom_histogram(aes(y = after_stat(density)), bins = 30) # 提取底层绘图数据 plot_data <- ggplot_build(p)$data[[1]]
提取到的plot_data数据框中:
x列直接对应base R中h$mids,即各分箱的中点值density列直接对应base R中h$density,即各分箱的密度值- 你也可以通过
xmin和xmax列(分箱的左右边界)自行计算中点值,结果和x列完全一致
方法2:不渲染图形,仅计算分箱数据
如果你不需要输出直方图,只想提前拿到分箱数据,可以调用stat_bin()配合空白geom参数实现:
bin_calc <- ggplot(data.frame(x = x), aes(x = x)) + stat_bin(aes(y = after_stat(density)), bins = 30, geom = "blank") bin_data <- ggplot_build(bin_calc)$data[[1]]
注意事项
提取数据时要保证分箱参数(bins、binwidth、boundary等)和你实际绘图使用的参数完全一致,拿到的分箱结果才会和最终渲染的直方图对应。
内容的提问来源于stack exchange,提问作者Farrokh Habibzadeh
相关产品推荐
相关产品推荐

