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

解决ggplot2中geom_bar_pattern手动设置图案颜色无效的问题

解决ggpattern图案颜色不生效的问题

问题根源在于ggpattern的图案颜色(pattern_fill)是独立于填充色(fill)的美学映射,需要单独配置手动映射,不能和填充色的scale混用。以下是具体解决步骤和代码示例:

1. 确认数据结构(模拟示例数据)

假设你的数据是类似这样的结构:

# 模拟计数数据框df
df <- expand.grid(
  sample = c("S1", "S2"),
  class = c("C1", "C2"),
  group = c("G1", "G2"),
  type = c("T1", "T2")
)
df$count <- sample(1:10, nrow(df), replace = TRUE)

# 模拟group对应自定义颜色的colors.df
colors.df <- data.frame(
  group = c("G1", "G2"),
  color = c("#2E86AB", "#F24C4C")
)

2. 修正后的绘图代码

核心是给pattern_fill单独设置手动映射,用scale_pattern_fill_manual:

library(ggplot2)
library(ggpattern)

ggplot(df, aes(x = type, y = count, fill = group, pattern = class)) +
  geom_col_pattern(
    position = "stack",
    pattern_shape = 1,  # 指定圆形图案
    pattern_density = 0.3,  # 调整图案密度
    pattern_size = 1,  # 调整图案大小
    color = "black"  # 图案边框色(可选)
  ) +
  # 用colors.df设置group的填充色
  scale_fill_manual(
    values = setNames(colors.df$color, colors.df$group)
  ) +
  # 关键:手动指定class对应的图案颜色
  scale_pattern_fill_manual(
    values = c("C1" = "white", "C2" = "black")  # 这里替换成你需要的颜色
  ) +
  labs(x = "Type", y = "Count", fill = "Group", pattern = "Class") +
  theme_minimal()

3. 关键注意事项

  • pattern_fill是ggpattern专属的美学属性,必须通过scale_pattern_fill_*系列函数来设置,不能用普通的scale_fill_*
  • 如果图案还是不显示,检查pattern_density和pattern_size参数,数值太小会导致图案看不见
  • 确保pattern = ~class的映射正确,class字段是离散型变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 21:02:09