如何为作物类型与氮肥处理定制合并图例?
合并作物类型与氮肥处理的图例解决方案
模拟数据集
先构造匹配需求的模拟数据:
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
相关产品推荐
相关产品推荐

