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

stat_bin位置异常:直方图百分比标签无法正确对齐

问题解决:直方图标签精准对齐柱子顶端

核心问题

你代码里的标签y轴用了占比(count/sum(count)),但主y轴是实际计数(0-45),两者尺度完全不匹配——占比数值在0-1之间,映射到计数轴上自然会靠近底部;前两个柱子占比高,数值略大,位置就显得比其他柱子的标签高,本质是尺度错位导致的。

修改后的代码

# 统一定义分组区间,避免重复编写
bin_breaks <- seq(0, 30, by = 3.5)

ggplot(bbdd, aes(t_fluoro)) +
  geom_histogram(breaks = bin_breaks, fill="#99ccff") + 
  scale_x_continuous(breaks=bin_breaks, limits=c(0,24.5), expand=c(0,0)) + 
  scale_y_continuous(limits=c(0,45), expand=c(0,0)) + 
  stat_bin(breaks = bin_breaks, 
           geom = "text", 
           color = "#333366",
           # 关键:y用实际计数,和柱子顶端对齐;标签仍计算占比
           aes(y = after_stat(count), 
               label = scales::percent(after_stat(count / sum(count)))),
           # 调整vjust让标签在柱子顶端上方,避免重叠
           vjust = -0.2) +
  coord_fixed(ratio=0.6) +
  xlab("Fluoroscopy time (min)") +
  ylab("number of subjects") +
  theme_light()  +
  theme(panel.grid.minor = element_blank(),
        panel.grid.major.x = element_blank())

关键修改点

  • 将stat_bin的y = after_stat(count / sum(count))改为y = after_stat(count):让标签的y坐标和柱子顶端的计数完全对齐
  • 保留label = scales::percent(after_stat(count / sum(count))):只改变标签显示的内容,不改变位置映射
  • 用vjust = -0.2将标签向上微调,避免和柱子顶端重叠(可根据实际显示效果调整数值,比如-0.1或-0.3)
  • 统一定义bin_breaks变量:减少重复代码,保证分组区间完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:12:10