如何在ggplot2条形图轴限外添加竖线与x轴下方文本?
解决方法:给ggplot2条形图添加竖线和x轴下方文本
没问题,我来帮你实现这个需求!我们可以用ggplot2的annotate()函数轻松添加竖线和x轴下方的分组文本,下面是修改后的完整代码,还附带了一些实用的优化:
library(dplyr) library(tidyr) library(ggplot2) # 加载数据 d <- structure(list(author = structure(c(1L, 2L, 4L, 3L, 5L, 6L, 8L, 11L, 13L, 12L, 10L, 9L, 7L), .Label = c("Bahr et al", "Fuller et al", "Garbossa et al", "Gokhale et al", "Iuchi et al", "Lee et al", "Lee Y et all", "Merrel et al", "Newton et al", "Rossetti et al", "Usery et al", "Wychowski et al", "Zachenhofer et al"), class = "factor"), nAE = c(-22L, -34L, -158L, -90L, -70L, -41L, -48L, -32L, -73L, -23L, -25L, -13L, -46L), AE = c(3L, 1L, 7L, 1L, 3L, 10L, 3L, 6L, 3L, 5L, 4L, 6L, 5L), SAE = c(0L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 2L, 0L, 2L, 0L, 0L)), .Names = c("author", "nAE", "AE", "SAE"), class = "data.frame", row.names = c(NA, -13L)) categories <- c("Adverse Effect", "No adverse effects", "Severe side effects") cols <- c("#f6766d", "#01bfc4", "orange") # 绘制条形图并添加自定义元素 q <- d %>% gather(key, value, -author) %>% ggplot(aes(author, value, fill = key)) + geom_col(alpha=0.9) + # 1. 添加分隔竖线:示例在第3-4、7-8位作者之间添加,可根据需求调整x位置 annotate("segment", x = 3.5, xend = 3.5, y = -160, yend = 15, color = "black", size = 1) + annotate("segment", x = 7.5, xend = 7.5, y = -160, yend = 15, color = "black", size = 1) + # 2. 添加x轴下方的分组文本:调整x位置和文本内容匹配你的实际分组 annotate("text", x = 2, y = -170, label = "Group 1", size = 4, color = "black") + annotate("text", x = 5.5, y = -170, label = "Group 2", size = 4, color = "black") + annotate("text", x = 10, y = -170, label = "Group 3", size = 4, color = "black") + scale_x_discrete(name="Author") + # 扩展y轴下限,给下方文本留出显示空间 scale_y_continuous(name="Number of observations", limits=c(-180,15), breaks=seq(-160, 15, by=10)) + theme_grey() + theme( legend.position = "top", # 旋转x轴标签,避免作者名称重叠(可选优化) axis.text.x = element_text(angle = 45, hjust = 1) ) + scale_fill_manual(labels = categories, values = cols) + labs(fill = "") # 查看最终图形 q
关键部分说明:
- 添加竖线:
annotate("segment")可以绘制任意线段,x和xend设置为离散轴的中间位置(比如第3和第4个作者之间是3.5),y和yend覆盖整个y轴范围,你可以自由调整竖线的颜色、线宽和线型。 - 添加x轴文本:
annotate("text")的y值设为比y轴下限更低的数值(这里把y轴下限扩展到-180,文本放在-170),x值设为每组的中间位置,确保文本和分组对齐,修改label内容即可替换成你的实际分组名称。 - y轴范围调整:扩展
scale_y_continuous的limits是为了避免下方文本被截断,保证显示完整。 - x轴标签旋转:这是个实用优化,解决作者名称过长导致的重叠问题,如果你不需要可以删掉这行代码。
内容的提问来源于stack exchange,提问作者cmirian
相关产品推荐
相关产品推荐

