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

ggplot绘制双饼图:如何按producer列指定对应填充颜色?

解决ggplot饼图按producer指定填充颜色的问题

你当前的问题在于scale_fill_manual(values = dat$color)传入的是整个数据框的color列(共6个元素),ggplot会按producer的因子顺序依次取前3个颜色,但这不是绑定producer与color的可靠方式——它依赖数据行的顺序,而非明确的映射关系。

正确的做法是先创建一个命名向量,将每个producer和对应的color一一绑定,这样不管数据子集的行顺序如何,颜色都会准确匹配对应的producer:

步骤1:创建颜色映射命名向量

# 提取producer与color的唯一对应关系
color_map <- unique(dat[, c("producer", "color")])
# 转换为命名向量:producer作为名称,color作为对应值
color_vec <- setNames(color_map$color, color_map$producer)

步骤2:修改绘图代码使用命名向量

library(ggplot2)
library(ggpubr)

A_2000 <- filter(dat, year == 2000)
A2000 <- ggplot(A_2000, aes(x="", y=value, fill=producer)) +
  geom_bar(stat="identity", width=1, color="white") +
  coord_polar("y", start=0) +
  theme_void() +
  scale_fill_manual(values = color_vec) # 用命名向量指定颜色

A_2010 <- filter(dat, year == 2010)
A2010 <- ggplot(A_2010, aes(x="", y=value, fill=producer)) +
  geom_bar(stat="identity", width=1, color="white") +
  coord_polar("y", start=0) +
  theme_void() +
  scale_fill_manual(values = color_vec) # 用命名向量指定颜色

ggarrange(A2000, A2010, ncol = 2, nrow = 1)

这样处理后,producer对应的颜色会完全按照你数据中定义的对应关系填充(比如B对应red、C对应blue、D对应green),不会因为数据子集的行顺序变化而出现颜色匹配错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 22:30:52