You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:48:04