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

如何为R语言ggplot绘制的Deming回归图手动创建含点、线型、颜色的图例?

解决ggplot绘制Deming回归图的图例自定义问题

原代码无法生成预期图例的核心原因是:线条的颜色、线型直接硬编码在geom_abline中,没有通过ggplot的美学映射(aes)绑定;散点也未加入图例映射逻辑。以下是修改后的完整实现,能生成包含散点、不同线型及颜色的统一图例:

修改后的代码

x1 <- data[[paste(event_list[i],"_1",sep="")]]
x2 <- data[[paste(event_list[i],"_2",sep="")]]
x3 <- data[[paste(event_list[i],"_3",sep="")]]
  
x = (x1 + x2 + x3)/ 3  # 修正原代码笔误:将x2+x2改为x3
y <- data[[paste(event_list[i],"_AI",sep="")]]  
df <- data.frame(x, y)
fit <- deming(x ~ y, data = df)

# 1. 整理所有线条的参数数据框,用于统一映射
line_df <- data.frame(
  line_name = c("Identity Line", "Deming Coef", "Confidence Interval", "Confidence Interval"),
  intercept = c(0, fit$coefficients[1], fit$ci[3], fit$ci[1]),
  slope = c(1, fit$coefficients[2], fit$ci[4], fit$ci[2]),
  color = c("black", "red", "blue", "blue"),
  linetype = c("dashed", "solid", "dashed", "dashed")
)

# 2. 绘制图形,通过aes映射绑定图例元素
ggplot(df, aes(x = x, y = y)) +
  # 散点:添加color和shape映射,让散点出现在图例
  geom_point(aes(color = "Observed Data", shape = "Observed Data"), size = 2) +
  # 线条:通过aes映射color和linetype到line_name,自动关联图例
  geom_abline(data = line_df, aes(intercept = intercept, slope = slope, color = line_name, linetype = line_name)) +
  # 3. 统一设置颜色、线型的图例映射
  scale_color_manual(
    name = "Legend",
    values = c(
      "Observed Data" = "black",
      "Identity Line" = "black",
      "Deming Coef" = "red",
      "Confidence Interval" = "blue"
    ),
    labels = c("Observed Data", "Identity Line", "Deming Coef", "Confidence Interval")
  ) +
  scale_linetype_manual(
    name = "Legend",
    values = c(
      "Observed Data" = "solid",  # 散点线型不影响,仅用于图例合并
      "Identity Line" = "dashed",
      "Deming Coef" = "solid",
      "Confidence Interval" = "dashed"
    ),
    labels = c("Observed Data", "Identity Line", "Deming Coef", "Confidence Interval")
  ) +
  # 4. 调整图例,让shape、color、linetype合并为一个
  guides(
    color = guide_legend(override.aes = list(shape = c(16, NA, NA, NA))),
    shape = guide_legend(override.aes = list(color = c("black", NA, NA, NA)))
  ) +
  labs(x = "Variables", y = "Reference") +
  ggtitle(paste(event_list[i], "Deming Regression")) +
  theme_bw()  # 可选:添加简洁主题优化显示

关键修改点说明

  • 线条参数数据化:把所有线条的截距、斜率、颜色、线型整理成数据框,用单个geom_abline绘制,通过aes映射color和linetype到线条名称,让ggplot自动识别图例元素。
  • 散点图例映射:给geom_point添加aes(color = "Observed Data", shape = "Observed Data"),将散点纳入图例体系。
  • 统一图例配置:scale_color_manual和scale_linetype_manual使用相同的图例名称,确保合并为一个图例;通过guides()调整图例显示,隐藏线条条目对应的散点形状、散点条目对应的线型,避免冗余。

内容的提问来源于stack exchange,提问作者호야무

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 09:13:20