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

ggplot2柱状图百分比位置与小数位数调整求助

解决geom_bar柱状图百分比位置与格式化问题

针对你提出的两个需求,直接修改代码如下:

修改后的完整代码

# 数据处理部分:调整百分比格式化
Data <- Data %>%
  filter(D=="D") %>%
  group_by(Operatiejaar, Ligging_compleet) %>%
  summarise(cnt = n(), .groups = "drop") %>%  # 清除分组残留,避免后续计算异常
  group_by(Operatiejaar) %>%  # 按年份分组计算占比,确保同一年份的百分比总和为100%
  mutate(Percentage = formattable::percent(cnt / sum(cnt), digits = 0))  # digits=0实现0位小数

# 绘图部分:调整文本位置
ggplot(data=Data) +
  aes(x=Operatiejaar, y=cnt, fill=Ligging_compleet) +
  geom_bar(stat = "identity", width = 0.9, position = "dodge2") +
  ggtitle(
    label = "Ligging",
    subtitle = "Verhoudingen") +
  theme(
    plot.title = element_text(hjust = 0.5),
    plot.subtitle = element_text(hjust = 0.5)) +
  xlab("Jaar") +
  ylab("Aantallen") +
  labs(fill = "Ligging") +
  geom_text(
    aes(label = Percentage, group = Ligging_compleet),  # 按分类分组,对应每个柱子
    color = "dark grey", 
    position = position_dodge(width = 0.9),  # 和柱状图宽度匹配,保证对齐
    vjust = -0.5,  # 固定在柱子上方
    hjust = 0.5,  # 水平居中,对齐柱子正上方
    size = 3)  # 移除旋转设置,让文字正常水平显示

关键修改点说明

  • 百分比格式化:在formattable::percent()中添加digits=0参数,直接将百分比四舍五入到0位小数;同时补充分组清理和明确的年份分组逻辑,避免占比计算错误。
  • 文本位置修正:
    1. 把geom_text的group改为Ligging_compleet,确保每个分类的文本对应到自身柱子
    2. 设置hjust=0.5让文本水平居中,移除angle=90取消文字旋转
    3. 将position_dodge(width)设为和geom_bar一致的0.9,保证文本与柱子精准对齐

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 04:33:30