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

ggplot:为双factor分组条形图设置指定序列的自定义颜色

嗨,这个需求很清晰,我来一步步帮你实现想要的分组条形图颜色设置~

核心思路

我们需要先明确两个因子的组合顺序,再手动指定对应颜色,确保从左到右依次是深红/浅红/深黄/浅黄。这里用ggplot2scale_fill_manual(填充色)来实现自定义配色,同时要保证条形的顺序和颜色一一对应。


步骤1:构造示例数据集(你可以替换成自己的数据)

假设你的两个因子是Group(区分红/黄组)和Type(区分深浅试验类型),先构造一个和你结构一致的示例数据:

library(ggplot2)
library(dplyr)

# 模拟你的数据集,提前指定组合类别的顺序
df <- tibble(
  Group = rep(c("Red", "Yellow"), each = 2),
  Type = factor(c("Dark", "Light", "Dark", "Light"), levels = c("Dark", "Light")),
  # 组合两个因子并指定顺序,确保条形排列为深红→浅红→深黄→浅黄
  Category = factor(paste(Group, Type), 
                   levels = c("Red Dark", "Red Light", "Yellow Dark", "Yellow Light")),
  Value = c(10, 8, 12, 9) # 替换成你的实际数值
)

步骤2:绘制带自定义颜色的分组条形图

scale_fill_manual指定每个组合对应的颜色,这里选了常用的深红/浅红/深黄/浅黄十六进制色码,你也可以换成自己喜欢的颜色:

ggplot(df, aes(x = Group, y = Value, fill = Category)) +
  # 绘制分组条形,position_dodge控制组内条形间距
  geom_col(position = position_dodge(width = 0.8), width = 0.7) +
  # 手动绑定颜色与类别,顺序要和Category的levels完全对应
  scale_fill_manual(values = c(
    "Red Dark" = "#8B0000",    # 深红
    "Red Light" = "#FF6347",   # 浅红
    "Yellow Dark" = "#DAA520", # 深黄
    "Yellow Light" = "#FFD700" # 浅黄
  )) +
  # 自定义标签让图表更清晰
  labs(title = "分组条形图", x = "组别", y = "数值", fill = "试验类型") +
  theme_minimal()

额外小技巧

如果不想单独创建Category变量,也可以直接用interaction(Group, Type)作为填充变量,注意默认的连接符是点(.),所以颜色映射要对应:

ggplot(df, aes(x = Group, y = Value, fill = interaction(Group, Type))) +
  geom_col(position = position_dodge(width = 0.8), width = 0.7) +
  scale_fill_manual(
    values = c("Red.Dark" = "#8B0000", "Red.Light" = "#FF6347",
               "Yellow.Dark" = "#DAA520", "Yellow.Light" = "#FFD700"),
    name = "试验类型",
    labels = c("深红", "浅红", "深黄", "浅黄") # 自定义图例标签
  ) +
  labs(title = "分组条形图", x = "组别", y = "数值") +
  theme_minimal()

这样就能完美实现你要的颜色区分效果啦~

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

火山引擎 最新活动