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

如何仅用geom_point在ggplot2直方图的每个条形顶部添加点?

在ggplot2直方图条形顶部添加geom_point的解决方法

要在直方图每个条形顶部添加点,核心是让geom_point使用和geom_histogram一致的分箱统计逻辑——默认情况下geom_point不会对数据做分箱处理,这就是你之前出现统计映射错误的原因。

具体实现要点

  1. 给geom_point指定stat = "bin",和直方图的统计变换保持统一
  2. 统一设置分箱参数(如bins或binwidth),确保点的位置和条形位置完全匹配
  3. 通过after_stat()获取分箱后的条形中点(x)和对应高度值(密度density或计数count)

示例代码

基于密度映射的完整实现

library(ggplot2)

ggplot(mtcars, aes(x = mpg)) +
  # 基础密度映射直方图
  geom_histogram(
    aes(y = after_stat(density)),
    bins = 10,
    fill = "lightblue",
    alpha = 0.5
  ) +
  # 密度映射频率多边形
  geom_freqpoly(
    aes(y = after_stat(density)),
    bins = 10,
    color = "red",
    linewidth = 1
  ) +
  # 条形顶部的点
  geom_point(
    stat = "bin",
    aes(x = after_stat(x), y = after_stat(density)),
    bins = 10,
    color = "darkgreen",
    size = 3
  )

基于计数映射的版本

如果不需要密度,直接用条形的计数作为高度,只需修改y的映射:

ggplot(mtcars, aes(x = mpg)) +
  geom_histogram(
    aes(y = after_stat(count)),
    bins = 10,
    fill = "lightblue",
    alpha = 0.5
  ) +
  geom_point(
    stat = "bin",
    aes(x = after_stat(x), y = after_stat(count)),
    bins = 10,
    color = "darkgreen",
    size = 3
  )

关键注意事项

必须保证geom_histogram和geom_point的分箱参数(bins/binwidth)完全一致,否则点的位置会和条形错位。

内容的提问来源于stack exchange,提问作者Laura

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 19:22:10