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

如何在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)
  )

关键说明

  1. 堆叠逻辑:position="stack"会将同一Category_A下、同一Category_B的不同Score数值堆叠在一起,形成一个以Category_B为颜色区分的堆叠块,同时用图案区分块内的Fail和Pass部分。
  2. 图例优化:guides(fill = ...)确保颜色图例仅显示纯色,避免图案干扰;添加pattern图例标题可提升图表可读性。
  3. 坐标轴与主题:保留原有对数坐标轴和主题设置,保证图表的专业性和可读性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 17:17:55