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

ggpattern图例合并与条纹颜色自定义问题求助

解决ggpattern柱状图图例合并与条纹自定义问题

核心思路

要实现合并填充色与图案图例、仅指定类别显示条纹、自定义条纹颜色,关键在于将fill和pattern美学统一映射到目标变量(如drv),通过手动刻度和图例覆盖来精准控制显示效果。

完整代码示例

假设使用mtcars数据集演示(适配你的数据结构即可):

library(ggplot2)
library(ggpattern)

# 准备数据(按drv分组统计)
df <- mtcars |>
  mutate(drv = factor(drv, levels = c("4", "f", "r"))) |>
  count(drv)

ggplot(df, aes(x = drv, y = n, fill = drv, pattern = drv)) +
  # 绘制带图案的柱状图,基础参数设置
  geom_col_pattern(
    pattern_fill = "white",   # 条纹间隔区域的填充色
    pattern_angle = 45,       # 条纹倾斜角度
    pattern_density = 0.3,    # 条纹密度(数值越小越稀疏)
    pattern_spacing = 0.05,   # 条纹间距
    color = "black"           # 柱子边框颜色
  ) +
  # 控制仅drv="f"显示条纹,其余无图案
  scale_pattern_manual(
    values = c("4" = "none", "f" = "stripe", "r" = "none")
  ) +
  # 自定义填充色(可替换为你需要的颜色)
  scale_fill_manual(values = c("4" = "#619CFF", "f" = "#F8766D", "r" = "#00BA38")) +
  # 合并图例:让fill图例包含图案属性,隐藏单独的pattern图例
  guides(
    fill = guide_legend(
      override.aes = list(
        pattern = c("none", "stripe", "none"),
        pattern_color = c(NA, "darkblue", NA)  # 自定义drv="f"的条纹颜色
      )
    ),
    pattern = "none"
  ) +
  labs(x = "驱动类型", y = "数量", fill = "驱动类型") +
  theme_minimal()

关键细节说明

  1. 图例合并:

    • 同时将fill和pattern映射到drv,确保两个美学基于同一变量分组。
    • 通过guides(pattern = "none")隐藏单独的图案图例,再用fill图例的override.aes整合图案显示效果。
  2. 仅指定类别显示条纹:

    • 在scale_pattern_manual中,为非目标类别(如"4"、"r")设置pattern = "none",仅给"f"设置"stripe"。
  3. 自定义条纹颜色:

    • 在guide_legend的override.aes里,对应"f"的位置设置pattern_color为你需要的颜色,其余设为NA(无条纹则无需颜色)。
    • 注意区分pattern_color(条纹本身的颜色)和pattern_fill(条纹之间空白区域的颜色)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 14:35:36