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

如何为作物类型与氮肥处理定制合并图例?

合并作物类型与氮肥处理的图例解决方案

模拟数据集

先构造匹配需求的模拟数据:

library(tidyverse)

set.seed(123)
df <- tibble(
  Sp = rep(c("Wheat", "Maize", "Rice"), each = 20),
  Nitrogen = rep(c("High N", "Low N"), each = 10, times = 3),
  x = rep(1:10, times = 6),
  y = rnorm(60, mean = 10, sd = 2)
)

修改后的绘图代码(合并图例)

核心是将作物类型与氮肥处理通过interaction()合并为分组变量,再通过guides()统一图例样式:

ggplot(df, aes(x = x, y = y)) +
  # 线条:作物设颜色,氮肥设线型,分组用作物+氮肥的组合
  geom_line(aes(colour = Sp, linetype = Nitrogen, group = interaction(Sp, Nitrogen)), linewidth = 1) +
  # 点:作物设颜色,氮肥设形状,分组同线条
  geom_point(aes(colour = Sp, shape = Nitrogen, group = interaction(Sp, Nitrogen)), size = 3) +
  
  # 指定线型规则:高氮实线,低氮虚线
  scale_linetype_manual(values = c("High N" = "solid", "Low N" = "dashed")) +
  # 统一点形状(若需区分氮肥处理,可修改values为c("High N"=16, "Low N"=17))
  scale_shape_manual(values = c("High N" = 16, "Low N" = 16)) +
  
  # 合并图例:隐藏线型和形状的单独图例,在颜色图例中覆盖美学参数
  guides(
    colour = guide_legend(
      title = "Crop & Nitrogen",
      override.aes = list(
        # 按作物顺序,每个作物对应高氮(实线)、低氮(虚线)
        linetype = rep(c("solid", "dashed"), 3),
        shape = rep(16, 6) # 若区分点形状,改为c(16,17,16,17,16,17)
      )
    ),
    linetype = "none",
    shape = "none"
  ) +
  
  labs(x = "X Axis", y = "Y Axis") +
  theme_minimal()

关键说明

  • interaction(Sp, Nitrogen)确保每个作物-氮肥组合作为独立分组,避免线条绘制混乱
  • scale_linetype_manual严格指定高氮、低氮对应的线型样式
  • guides()是合并图例的核心:通过override.aes在颜色图例中嵌入线型和点样式,同时隐藏单独的线型、形状图例,实现合并效果

内容的提问来源于stack exchange,提问作者washfaq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 05:42:40