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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:47:23