解决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
相关产品推荐
相关产品推荐

