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

ggplot2:为直方图柱形添加填充值均值标注

问题描述

我用直方图可视化两个变量的关系,分箱柱形采用渐变色填充,以此展示数值变量在分箱中的变化趋势。为了更直观呈现,希望在每个柱形上方添加该分箱对应的填充变量均值(每个柱顶标注对应building_dissimilarity的均值),现有代码如下,请问如何修改代码实现这个效果?

p <- df2 %>% 
  mutate(dist2init = cut(x      = dist2init, 
                   breaks = hist(dist2init, breaks = 0:1500 * 100, plot = FALSE)$breaks,
                   labels = hist(dist2init, breaks = 0:1500 * 100, plot = FALSE)$mids)) %>%
  group_by(dist2init) %>%
  summarize(n = n(), building_dissimilarity = mean(building_dissimilarity)) %>%
  ggplot(aes(x = as.numeric(as.character(dist2init)), y = n, fill = building_dissimilarity)) +
  scale_x_continuous(limits = c(0, 1500), name = "Distance to initiator") +
  geom_col(width = 100) +
  xlab('Distance to block leader')
解决方案

只需在ggplot代码中添加geom_text()或geom_label()层,直接调用已计算好的building_dissimilarity均值即可实现标注,修改后的完整代码如下:

p <- df2 %>% 
  mutate(dist2init = cut(x      = dist2init, 
                   breaks = hist(dist2init, breaks = 0:1500 * 100, plot = FALSE)$breaks,
                   labels = hist(dist2init, breaks = 0:1500 * 100, plot = FALSE)$mids)) %>%
  group_by(dist2init) %>%
  summarize(n = n(), building_dissimilarity = mean(building_dissimilarity)) %>%
  ggplot(aes(x = as.numeric(as.character(dist2init)), y = n, fill = building_dissimilarity)) +
  scale_x_continuous(limits = c(0, 1500), name = "Distance to initiator") +
  geom_col(width = 100) +
  # 新增柱顶标注层
  geom_text(aes(label = round(building_dissimilarity, 2)), 
            vjust = -0.5,  # 调整标注与柱顶的垂直距离,负数表示在柱顶上方
            size = 3) +    # 设置标注文字大小
  xlab('Distance to block leader')

细节调整说明:

  • round(building_dissimilarity, 2):将均值保留两位小数,让标注更简洁,可根据需求修改小数位数
  • vjust参数:控制标注的垂直位置,数值越小(更负),文字离柱顶越远;若想让文字部分落在柱形内,可设为正数(如vjust = 1.2)
  • 若需要带背景框的标注,替换geom_text()为geom_label()即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:15:32