You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使含分类变量的两个数据集在ggplot绘图中颜色保持一致?

解决方法:给分类类别绑定固定颜色映射

要让两个图表的分类颜色保持一致,核心思路是给每个可能的分类类别分配一个固定的颜色,不管变量名是Verzekeraar还是Verzekeraar_Historie,只要类别名称相同,就用同一个颜色。具体操作如下:

1. 创建带命名的颜色映射向量

首先我们需要把两个数据集中的所有分类类别合并去重,然后给每个类别绑定对应的颜色,形成一个命名向量(类别名作为名称,颜色值作为对应的值):

# 提取两个数据集的所有分类类别并合并去重
all_verzekeraars <- unique(c(
  tabelmarktaandeel$Verzekeraar,
  tabelmarktaandeelhist$Verzekeraar_Historie
))

# 基于你已有的corp_palette,创建命名颜色映射
# 确保corp_palette的颜色数量足够覆盖所有类别,不够的话可以补充颜色
named_corp_palette <- setNames(corp_palette[1:length(all_verzekeraars)], all_verzekeraars)

如果你的类别是固定的,也可以手动直接定义命名映射,更直观:

named_corp_palette <- c(
  "Verzekeraar X" = "#2E8B57",
  "Verzekeraar Y" = "#FF6347",
  "Verzekeraar Z" = "#4682B4"
  # 继续添加所有需要的类别与对应颜色
)

2. 在两个图表中复用这个颜色映射

接下来,把两个图表的scale_fill_manual都替换成这个命名向量,这样相同的类别名称就会自动匹配到相同的颜色:

# 第一个图表
percmarkt <- ggplot(tabelmarktaandeel, aes(x=Jaar, y=Percentage, fill=Verzekeraar)) +
  geom_bar(stat="summary", fun.y="sum") +
  scale_fill_manual(values=named_corp_palette)

# 第二个图表
percmarkthist <- ggplot(tabelmarktaandeelhist, aes(x=Jaar, y=Percentage, fill=Verzekeraar_Historie)) +
  geom_bar(stat="summary", fun.y="sum") +
  scale_fill_manual(values=named_corp_palette)

额外小技巧

  • 如果其中一个数据集缺少某些类别,scale_fill_manual会自动忽略未出现的类别映射,不会报错。
  • 要是想让两个图表的图例标题统一,可以在scale_fill_manual里加上name参数,比如name="Verzekeraar",让图例显示一致的标题。

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

火山引擎 最新活动