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位小数;同时补充分组清理和明确的年份分组逻辑,避免占比计算错误。 - 文本位置修正:
- 把
geom_text的group改为Ligging_compleet,确保每个分类的文本对应到自身柱子 - 设置
hjust=0.5让文本水平居中,移除angle=90取消文字旋转 - 将
position_dodge(width)设为和geom_bar一致的0.9,保证文本与柱子精准对齐
- 把
内容的提问来源于stack exchange,提问作者Yvonne
相关产品推荐
相关产品推荐

