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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 10:48:02