ggplot2黑白散点折线图不通过颜色仅用线型点形添加图例方案
黑白双变量散点折线图加图例的实现方案
ggplot2的图例是基于美学映射自动生成的,你当前的代码直接在geom层手动指定固定点形、线型,再搭配scale_*_identity(),只会直接应用样式不会生成图例。要实现黑白风格下用点形、线型区分变量同时生成图例,有两种可行方案:
方案1(推荐):宽表转长表后映射绘图
这是ggplot2的标准用法,可维护性更高,自动合并同分类的图例:
# 加载所需包 library(ggplot2) library(tidyr) # 宽表转长表,把两个Y变量整合为分组列 birds_long <- pivot_longer(birds, cols = c(individuals_AC, species_AC), names_to = "指标类型", values_to = "计数值") # 绘图代码 ggplot(birds_long, aes(x = distance, y = 计数值)) + geom_point(aes(shape = 指标类型)) + geom_line(aes(linetype = 指标类型)) + # 手动设置黑白风格的对应样式 scale_shape_manual(values = c("individuals_AC" = 16, "species_AC" = 17)) + scale_linetype_manual(values = c("individuals_AC" = "solid", "species_AC" = "dashed")) + theme_classic()
最终两个变量会分别对应「实心圆+实线」「实心三角+虚线」的黑白样式,图例自动生成。
方案2:不转换数据,手动添加映射标识
如果不想修改原始数据结构,可以直接在各层的aes()内传入分类标识实现映射:
ggplot(birds, aes(distance)) + geom_point(aes(y = individuals_AC, shape = "individuals_AC")) + geom_point(aes(y = species_AC, shape = "species_AC")) + geom_line(aes(y = individuals_AC, linetype = "individuals_AC")) + geom_line(aes(y = species_AC, linetype = "species_AC")) + # 手动匹配样式和图例标题 scale_shape_manual(name = "指标类型", values = c("individuals_AC" = 16, "species_AC" = 17)) + scale_linetype_manual(name = "指标类型", values = c("individuals_AC" = "solid", "species_AC" = "dashed")) + theme_classic()
该方案最终呈现效果和方案1完全一致。
内容的提问来源于stack exchange,提问作者heftycrow
相关产品推荐
相关产品推荐

