如何在ggplot分组柱状图中为各组添加数值顶部标记线?
解决方案:ggplot实现柱状图+分组水平标记线
针对需求——第一组数据用蓝色实心柱状图展示,第二组数据仅在对应分组的数值位置添加水平标记线,提供两种简洁实现方式:
方法一:直接用geom_segment绘制水平标记线(推荐)
这种方式无需借助柱子,直接精准绘制对应位置的水平短线,代码更简洁高效:
library(ggplot2) # 定义数据 Tbl = data.frame(Factor = c("a","b","c","d"), Percent = c(43,77,37,55)) Tbl2 = data.frame(Factor = c("a","b","c","d"), Percent = c(58,68,47,63)) # 将因子转为有序类型,便于计算x轴位置 Tbl$Factor <- factor(Tbl$Factor) Tbl2$Factor <- factor(Tbl2$Factor) ggplot(aes(x = Factor, y = Percent), data = Tbl) + # 绘制第一组蓝色柱状图,设置合适宽度 geom_bar(stat = "identity", fill = "blue", width = 0.7) + # 绘制第二组的水平标记线,短线宽度匹配柱子宽度 geom_segment( data = Tbl2, aes( x = as.integer(Factor) - 0.35, # 柱子左边界位置 xend = as.integer(Factor) + 0.35, # 柱子右边界位置 y = Percent, yend = Percent ), color = "black", size = 1 ) + ylim(0, 100) + theme_bw()
方法二:优化原有geom_bar实现
如果要基于你原有的代码修改,通过隐藏柱子侧边边框、仅保留顶部横线来实现:
library(ggplot2) Tbl = data.frame(Factor = c("a","b","c","d"), Percent = c(43,77,37,55)) Tbl2 = data.frame(Factor = c("a","b","c","d"), Percent = c(58,68,47,63)) ggplot(aes(x = Factor, y = Percent), data = Tbl) + geom_bar(stat = "identity", fill = "blue") + ylim(0, 100) + # 绘制透明柱子,将左右边框设为白色隐藏 geom_bar( data = Tbl2, stat = "identity", fill = NA, color = "white", size = 1 ) + # 单独添加顶部黑色横线 geom_segment( data = Tbl2, aes( x = as.integer(Factor) - 0.4, xend = as.integer(Factor) + 0.4, y = Percent, yend = Percent ), color = "black", size = 1 ) + theme_bw()
内容的提问来源于stack exchange,提问作者Rik Lamm
相关产品推荐
相关产品推荐

