如何在R中绘制带图案的单组分类堆叠柱状图?
需求实现方案
问题说明
需要绘制3个对应Category_A类别的柱状图,每个柱子内堆叠Category_B的分类,同时在每个堆叠块内用Score字段的图案(Fail为条纹,Pass无图案)区分对应数值。
解决方案
核心是调整柱状图的堆叠逻辑,将position参数设置为"stack",同时保留原有映射关系,即可实现每个Category_A柱子内堆叠Category_B分类,且每个堆叠块内用图案区分Score的需求。
修改后的完整代码
ggplot(df, aes(fill = Category_B, y = count, x = Category_A, pattern = Score)) + geom_bar_pattern( position = "stack", # 关键修改:从dodge改为stack stat = "identity", pattern_spacing = 0.01, pattern_frequency = 5, pattern_angle = 45 )+ theme_bw()+ labs(y = "Count", x = "")+ scale_y_log10( breaks = trans_breaks("log10", function(x) 10^x), labels = trans_format("log10", math_format(10^.x)) )+ scale_fill_manual(values = c("cyan3","darkgoldenrod1","brown2")) + scale_pattern_manual(values = c('stripe', 'none'))+ guides( fill = guide_legend(override.aes = list(pattern = c("none", "none", "none"))), pattern = guide_legend(title = "Score") # 可选:为图案图例添加标题,提升可读性 ) + theme( legend.key.width = unit(1, "cm"), legend.title = element_text(size = 14), legend.background = element_rect(color = "transparent"), legend.position = "right", legend.direction = "vertical", legend.spacing.y = unit(0.4, 'cm'), panel.grid.major = element_blank(), panel.grid.minor = element_blank(), text = element_text(size = 16) )
关键说明
- 堆叠逻辑:
position="stack"会将同一Category_A下、同一Category_B的不同Score数值堆叠在一起,形成一个以Category_B为颜色区分的堆叠块,同时用图案区分块内的Fail和Pass部分。 - 图例优化:
guides(fill = ...)确保颜色图例仅显示纯色,避免图案干扰;添加pattern图例标题可提升图表可读性。 - 坐标轴与主题:保留原有对数坐标轴和主题设置,保证图表的专业性和可读性。
内容的提问来源于stack exchange,提问作者AneesBaqir
相关产品推荐
相关产品推荐

