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

如何使用ggplot2和ggpattern为条形图特定部分添加条纹

解决方案

1. 安装并加载依赖包

要实现带条纹的填充效果,需要用到基础绘图包ggplot2和扩展填充图案的ggpattern:

install.packages(c("ggplot2", "ggpattern"))
library(ggplot2)
library(ggpattern)

2. 数据预处理

给41个唯一的CTaa_beta值分配颜色和条纹标记:

# 提取所有唯一的CTaa_beta值
unique_ct <- unique(topclones$CTaa_beta)

# 前26个用ggplot默认的alphabet2调色板,剩余的统一用深灰色
color_mapping <- c(scales::hue_pal()(26), rep("#333333", length(unique_ct) - 26))
names(color_mapping) <- unique_ct

# 新增列标记是否需要添加条纹:前26个不需要,剩下的需要
topclones$need_stripe <- topclones$CTaa_beta %in% unique_ct[27:length(unique_ct)]

3. 绘制分组条形图

用geom_col_pattern替代普通geom_col,通过pattern参数控制条纹显示,同时绑定颜色映射:

ggplot(topclones, aes(x = Group, y = Percent, fill = CTaa_beta)) +
  geom_col_pattern(
    aes(pattern = need_stripe),
    pattern_fill = "white",       # 条纹颜色,与深灰色形成明显对比
    pattern_density = 0.1,        # 条纹密度,数值越小越稀疏
    pattern_spacing = 0.02,       # 条纹间距
    position = position_dodge(0.9)# 保持分组条形对齐,与默认geom_col一致
  ) +
  # 绑定颜色映射
  scale_fill_manual(values = color_mapping) +
  # 设置图案规则:不需要条纹的用"none",需要的用"stripe"
  scale_pattern_manual(values = c(FALSE = "none", TRUE = "stripe")) +
  # 自定义图表标签
  labs(
    title = "分组条形图:Group vs Percent(按CTaa_beta区分)",
    x = "Group",
    y = "Percent",
    fill = "CTaa_beta"
  ) +
  theme_minimal()

关键细节说明

  • scales::hue_pal()(26)生成的颜色与ggplot默认的alphabet2调色板完全一致,保证前26个类别颜色正常显示
  • 剩余类别统一用深灰色+白色条纹,既解决了颜色不足的问题,又能清晰区分普通彩色条形和重复颜色的条形
  • position_dodge(0.9)确保分组条形的间距与普通geom_col一致,避免错位

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 15:14:54