在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
相关产品推荐
相关产品推荐

