如何在ggplot2中调整颜色-形状组合图例且保留默认配色
解决方法
你不需要手动指定颜色值,将scale_colour_manual替换为默认的scale_colour_discrete即可保留ggplot2原生配色,同时保证颜色、形状两个scale的图例标题、标签完全一致就能自动合并图例:
library(tidyverse) data <- data.frame(x = rep(seq(from=10, to=100, by=10), each=2), y = runif(20,0,1), group = rep(0:1,20)) data %>% ggplot(aes(x=x, y=y, col=factor(group), shape=factor(group))) + geom_point(size=3) + geom_line() + # 离散颜色scale不指定values参数时默认使用ggplot2原生配色 scale_colour_discrete(name = "Group", labels = c("A", "B")) + scale_shape_manual(name = "Group", labels = c("A", "B"), values = c(0,1))
注意:你原有代码中的
labels = c("A, B")是错误写法,会将两个分组的标签设置为同一个字符串,需要改为包含两个元素的向量c("A", "B")。
更简化的写法
你也可以通过labs()函数统一修改两个映射的图例标题,不需要在每个scale里重复配置name参数:
data %>% ggplot(aes(x=x, y=y, col=factor(group), shape=factor(group))) + geom_point(size=3) + geom_line() + # 统一设置两个映射的图例标题 labs(color = "Group", shape = "Group") + scale_colour_discrete(labels = c("A", "B")) + scale_shape_manual(labels = c("A", "B"), values = c(0,1))
核心逻辑
ggplot2合并多个美学映射图例的唯一要求是:多个映射对应scale的name(图例标题)和labels(图例标签)完全一致,不需要强制使用带_manual后缀的scale,不需要额外修改默认配色、形状等配置。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

