ggplot2仅显示单个图例:为真实值虚线添加独立图例
解决ggplot2中添加独立虚线图例的问题
需求:绘制两组类别下2种模型输出的beta系数箱线图,叠加真实beta系数(虚线)做对比,需为虚线创建独立图例,标注“真实值”。
原代码未给虚线的线型设置映射关系,导致无法生成独立图例。以下是修改后的完整代码:
sample_size = 200 betas_df = data.frame( Beta_Type = rep(c("b1", "b2"), each = sample_size/2), Estimates = c(rnorm(sample_size/2, 0, 1), rnorm(sample_size/2, 3, 1)), LL = c(rnorm(sample_size/2, -1, 1), rnorm(sample_size/2, 2, 1)), UL = c(rnorm(sample_size/2, 1, 1), rnorm(sample_size/2, 4, 1)), Type_A = rep(c("Type1", "Type2", "Type3", "Type4"), sample_size/4), Type_B = rep(rep(c("Cat1", "Cat2"), each = sample_size/4), 2), x_start = rep(c(.75, 1.75), each = sample_size/2), x_end = rep(c(1.25, 2.25), each = sample_size/2), True_Value = rep(c(0, 0, 0, 0, 3, 3, 3, 3), each = sample_size/8) ) library(ggplot2) ggplot(data = betas_df, aes(x = Beta_Type, y = Estimates))+ geom_boxplot(aes(col = as.factor(Beta_Type)))+ facet_grid(rows = vars(Type_A), cols = vars(Type_B))+ # 关键修改:在aes中映射linetype为固定字符串,用于生成图例 geom_segment(aes(x = x_start, xend = x_end, y = True_Value, yend = True_Value, linetype = "真实值"), # 新增映射 col = "black")+ # 移除原linetype设置,移到scale里 # 定义线型的显示规则 scale_linetype_manual(name = "", # 图例名称,可留空或自定义 values = c("真实值" = "dashed"), labels = "真实值")+ scale_color_manual(name = "Symbols", values = c("b1" = "#F8766D", "b2" = "#00BFC4"), labels = c(expression(beta[1]), expression(beta[2])))+ scale_x_discrete(labels = c("b1" = expression(beta[1]), "b2" = expression(beta[2])))+ ggtitle("Estimated Beta Coefficients")+ xlab("Beta Type")+ ylab("Coefficient")
核心修改说明:
- 把
linetype = "dashed"从geom_segment的全局参数移到aes映射中,绑定一个标识字符串(如"真实值"),让ggplot识别这是一个需要生成图例的变量 - 通过
scale_linetype_manual指定该标识对应的线型和图例标签,实现独立的虚线图例 - 无需额外设置
show.legend = TRUE,映射后自动生成图例
内容的提问来源于stack exchange,提问作者Jade131621
相关产品推荐
相关产品推荐

