在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(),具体步骤如下:
- 安装并加载所需包:
install.packages("ggpattern") library(ggpattern) library(ggplot2)
- 绘制带图案的柱状图:
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
相关产品推荐
相关产品推荐

