如何在ggplot水平条形图右侧添加百分比(df$Freq)
给ggplot水平条形图的条形末端添加百分比标签
要在水平条形图的每个条形右侧添加对应的百分比,直接使用geom_text()图层即可,以下是修改后的完整代码:
City <- c("Rome", "Paris", "Madrid", "London", "Berlin", "Ottawa") N <- c(230, 752, 957, 473, 178, 389) Freq <- round(proportions(N) * 100, 2) df <- data.frame(City, N, Freq) plt <- ggplot(df) + geom_col(aes(N, fct_relevel(City, "Berlin", "Rome", "Ottawa", "London", "Paris", "Madrid" )), fill = "grey75", width = 0.6) + # 添加百分比标签的核心代码 geom_text(aes(x = N, y = fct_relevel(City, "Berlin", "Rome", "Ottawa", "London", "Paris", "Madrid" ), label = paste0(Freq, "%")), hjust = -0.1, # 让标签偏移到条形右侧 size = 3.5, # 调整标签字号 color = "black") + xlab("Total") + ylab("") + # 扩大x轴范围,避免右侧标签被截断 scale_x_continuous(limits = c(0, 1100), breaks = seq(0, 900, by = 250)) + theme(axis.title = element_text(size = 10, face = "bold")) + labs(title = "Graph - Example") plt
关键细节说明:
- 对齐标签:
geom_text()的y轴映射要和geom_col()完全一致,确保标签与对应条形垂直对齐 - 格式化标签:用
paste0(Freq, "%")将数值转为带百分号的文本,提升可读性 - 位置调整:
hjust = -0.1控制水平对齐方式,负数让标签偏移到条形外侧;可根据需求调整这个数值改变距离 - 避免截断:原x轴上限1000无法容纳最长条形的标签,因此将
limits改为c(0, 1100),给标签留出显示空间 - 样式优化:可通过
size、color参数调整标签的大小和颜色,匹配图表整体风格
内容的提问来源于stack exchange,提问作者always.learning
相关产品推荐
相关产品推荐

