如何在ggplot图表中添加填充图案作为颜色外的区分标识并同步到图例
实现方案
要给ggplot2的图表同时添加颜色+填充图案区分分组,且图案同步显示在图例中,可以借助ggpattern扩展包实现,具体代码如下:
前置准备
首先安装加载所需包:
# 安装包(首次使用执行) install.packages("ggpattern") # 加载包 library(ggplot2) library(ggpattern)
你的示例数据无需修改,可直接使用。
修改后的柱状图代码
ggplot(Data,aes(x=Direction, y=Delay, fill=Label))+ # 替换原geom_bar为带图案的geom_bar_pattern,新增pattern映射到分组变量Label geom_bar_pattern(stat="identity",position="dodge", aes(pattern = Label), pattern_colour = "white", # 图案线条颜色 pattern_density = 0.3, # 图案密度 pattern_spacing = 0.02) + # 图案元素间距 geom_text(aes(label=round(Delay)), position=position_dodge(width=0.9), vjust=-0.25) + scale_fill_manual(values = c("BB" = "#00BFCa", "WZ" = "#F8766D"))+ # 手动配置不同分组的填充图案 scale_pattern_manual(values = c("BB" = "stripe", "WZ" = "circle")) + xlab("Travel Direction")+ ylab("Aggregated Delay (hours)") + # 合并颜色和图案的图例,确保图例同时展示对应颜色+图案 guides(fill=guide_legend(title=NULL), pattern = guide_legend(title=NULL)) + theme(plot.title = element_text(size=12) )
修改后的箱线图代码
ggplot(Data, aes(x=Direction, y=Delay, fill=Label)) + # 替换原geom_boxplot为带图案的geom_boxplot_pattern,新增pattern映射 geom_boxplot_pattern(aes(pattern = Label), outlier.colour = 8, outlier.shape = 1, pattern_colour = "white", pattern_density = 0.3, pattern_spacing = 0.02) + scale_fill_manual(values = c("BB" = "#00BFCa", "WZ" = "#F8766D")) + scale_pattern_manual(values = c("BB" = "stripe", "WZ" = "crosshatch")) + xlab("Direction") + ylab("Delay") + ggtitle("By Direction") + guides(fill=guide_legend(title=NULL), pattern = guide_legend(title=NULL)) + theme(plot.title = element_text(size=12, hjust = 0.5))
可自定义调整说明
- 可选填充图案类型:
stripe(条纹)、crosshatch(交叉线)、circle(圆点)、rect(矩形)、wave(波浪线)等,可根据需求自行替换 - 可通过调整
pattern_density修改图案密度、pattern_spacing修改图案元素间距、pattern_colour修改图案线条颜色
内容的提问来源于stack exchange,提问作者Filly
相关产品推荐
相关产品推荐

