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

在ggplot分组柱状图中用条纹图案替代颜色(ggpattern尝试无效)

为分组柱状图添加图案填充替代颜色

我需要给分组数据绘制柱状图,用不同的图案填充每个组(因为颜色效果不佳)。

我的数据

Time <- c(1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,6,11,11,11,11,11)
Group <- c("A", "B", "C","D","E","A","B","C","D","E","A","B","C","D","E","A","B","C","D","E","A", "B","C","D","E", "A","B","C","D","E") 
Values <- c(38.4161807, 1.8280313, 34.1550423, 0.0000000, 37.2460332, 66.4168001 ,59.3746830 , 2.9191253, 5.6341807 , 3.5369600, 84.2639108, 11.1884641, 0.0000000 ,73.0754466 ,0.0000000, 60.5906227, 42.6958082 ,2.2462260 ,14.6034461, 1.4389593 ,2.2875870 ,1.4289716 ,0.0000000, 0.0000000, 0.8586154, 4.7177827 ,1.7227924 ,2.9949903 ,0.0000000 ,0.0000000)
data <- data.frame(Time, Group, Values)

我之前的颜色填充代码

ggplot(data, aes(x=as.factor(Time), y=Values, fill=Group )) +
  geom_bar(stat="identity", position="dodge") +
  scale_fill_manual(name="Group",
                    values=c("black", "Grey", "blue", "green", "yellow")) +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"))

需求

我想把颜色换成类似条纹、网格这类图案填充(参考带有不同纹理的柱状图效果),尝试过ggpattern库的pattern()和pattern_fill()函数,但没有效果。

解决方案

要实现图案填充,核心是使用ggpattern包的geom_bar_pattern()替代原生geom_bar(),具体步骤如下:

  1. 安装并加载所需包:
install.packages("ggpattern")
library(ggpattern)
library(ggplot2)
  1. 绘制带图案的柱状图:
ggplot(data, aes(x=as.factor(Time), y=Values, pattern=Group, fill=Group)) +
  geom_bar_pattern(
    stat="identity", 
    position="dodge",
    pattern_fill = "black",
    pattern_color = "black",
    pattern_density = 0.1,
    pattern_spacing = 0.02
  ) +
  scale_pattern_manual(
    name="Group",
    values=c("stripe", "crosshatch", "dot", "grid", "wave")
  ) +
  scale_fill_manual(
    name="Group",
    values=c("white", "white", "white", "white", "white")
  ) +
  theme(panel.grid.major = element_blank(), panel.grid.minor = element_blank(),
        panel.background = element_blank(), axis.line = element_line(colour = "black"))

关键说明

  • 必须使用geom_bar_pattern()而非原生geom_bar(),这是ggpattern实现图案填充的核心
  • 通过scale_pattern_manual()为每个组指定不同图案,可选类型包括stripe(条纹)、crosshatch(交叉线)、dot(圆点)等
  • 可调整pattern_density(图案密度)和pattern_spacing(图案间距)优化显示效果
  • 底色设为白色能让图案更清晰,也可根据需求替换为浅色系底色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 07:53:13