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

在ggplot2中隐藏箱线图图例后,如何为自定义水平线添加图例?

问题:为箱线图中的水平线单独添加图例

原始数据代码:

set.seed(100)
vals <- rnorm(100)
groups <- c(rep('group a', 30), rep('group b', 70))
df <- data.frame('vals'=vals, 'groups'=groups)

原始绘图代码:

ggplot(df, aes(y=vals, x=groups, fill=groups)) +
geom_boxplot() +
theme_minimal() +
scale_fill_brewer(palette = "Set3") +
geom_hline(yintercept=0.5, color='red', lty='dashed', size=1) +
geom_hline(yintercept=-0.5, color='blue', lty='dashed', size=1) +
theme(legend.title=element_blank(), legend.position='none') 

要实现仅显示水平线的图例、隐藏箱线图填充图例的效果,可以按以下方式修改代码:

ggplot(df, aes(y=vals, x=groups)) +
  geom_boxplot(aes(fill=groups)) +
  theme_minimal() +
  scale_fill_brewer(palette = "Set3") +
  # 为水平线添加color映射,定义图例显示文本
  geom_hline(aes(yintercept=0.5, color="上阈值"), lty='dashed', size=1) +
  geom_hline(aes(yintercept=-0.5, color="下阈值"), lty='dashed', size=1) +
  # 绑定图例文本与对应颜色
  scale_color_manual(values = c("上阈值"="red", "下阈值"="blue")) +
  # 隐藏箱线图的填充图例,设置水平线图例标题为空
  guides(fill="none", color=guide_legend(title=NULL))

关键调整说明:

  • 将fill=groups从全局aes移至geom_boxplot内部,再通过guides(fill="none")直接隐藏箱线图的填充图例;
  • 为每条水平线的aes添加color映射(比如"上阈值""下阈值"作为图例显示文本),让ggplot为水平线生成图例;
  • 使用scale_color_manual将图例文本与指定颜色绑定,确保水平线颜色和图例颜色一致;
  • 最后通过guides设置水平线图例标题为空,优化可视化简洁度。

内容的提问来源于stack exchange,提问作者Otto Kässi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:25:29