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

如何替换ggpattern图例,仅保留S5x与S5z指定项

解决方案

直接通过设置scale的breaks参数筛选要保留的图例项,同时整合fill和pattern的图例避免重复,以下是修改后的完整代码:

library("ggplot2")
library("ggpattern")

data <- ("
Var1 Frequency group Proportion Percentage Type
A 10 P 0.1250 12% P
B 4 Q2 0.0500 5% Q2
C 11 R 0.1375 14% R
D 33 S5x 0.4125 41% S5
E 10 S5z 0.1250 12% S5
F 12 T 0.1500 15% T
")
df <- read.table(textConnection(data), header=TRUE)

# 指定要保留显示的group项
keep_groups <- c("S5x", "S5z")

# 为目标group定义对应样式
fill_colors <- c(S5x = "#0072B2", S5z = "#56B4E9")
patterns <- c(S5x = "stripe", S5z = "none")
pattern_angles <- c(S5x = 135, S5z = 135)

plotParam <- ggplot(data = df, aes(x = Type, y = Proportion, fill = group, pattern = group)) +
  geom_bar_pattern(
    stat = "identity", 
    position = "stack", 
    color = "black", 
    pattern_fill = "black", 
    pattern_color = "#0072B2"
  ) +
  # 设置fill图例:只保留目标项,指定对应颜色
  scale_fill_manual(
    breaks = keep_groups,
    values = fill_colors,
    name = "Group" # 图例标题可按需修改
  ) +
  # 设置pattern图例:只保留目标项,指定对应图案
  scale_pattern_manual(
    breaks = keep_groups,
    values = patterns,
    name = "Group" # 和fill的name一致,实现图例合并
  ) +
  # 整合图例样式,关闭单独的pattern图例
  guides(
    fill = guide_legend(
      override.aes = list(
        pattern_angle = pattern_angles,
        pattern_color = "#0072B2"
      )
    ),
    pattern = "none"
  )

plotParam

关键修改说明:

  • 移除原代码中自定义的scale_colour_discrete和scale_fill_discrete函数,改用明确的手动scale,更易控制图例显示逻辑。
  • 用keep_groups锁定要保留的图例项,在scale_fill_manual和scale_pattern_manual中通过breaks参数过滤掉不需要的图例。
  • 为目标group单独绑定样式(颜色、图案、角度),避免原代码中按顺序赋值的混乱。
  • 通过统一两个scale的name实现图例合并,再关闭单独的pattern图例,只保留一个整合后的图例。
  • 在guide_legend的override.aes中仅传入目标group对应的角度参数,确保图例样式与图表一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:32:46