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

使用scale_pattern_manual()设置stripe时图例不显示图案的问题

解决ggplot2中geom_tile_pattern的stripe图案图例不显示问题

问题分析

当将scale_pattern_manual的图案值从circle改为stripe时,瓷砖上的条纹能正常显示,但mat图例的Not项无法渲染出条纹。这是因为stripe图案的图例渲染对美学映射的明确性和参数设置要求更高,默认的透明填充会导致条纹在图例中不可见。

修复代码

library(ggplot2)
library(ggpattern)

fake_dat <- data.frame(pub = c("A","B"),
                       pl = c("D","E"),
                       p25 = c("1","2"),
                       mat = c("Ideal","Not"))

ggplot(fake_dat, aes(x=pub, y=pl)) + 
  # 绘制基础填充瓷砖
  geom_tile(aes(fill = p25)) + 
  # 绘制带图案的瓷砖,明确绑定pattern映射
  geom_tile_pattern(aes(pattern = mat),
                    pattern_fill = "black", 
                    pattern_color = "black", 
                    pattern_density = 0.35, 
                    fill = "transparent", 
                    show.legend = TRUE) + 
  # 手动设置图案,强制图例渲染条纹样式
  scale_pattern_manual(values = c("Ideal" = "none", "Not" = "stripe"),
                       guide = guide_legend(override.aes = list(
                         pattern_fill = "black", 
                         pattern_color = "black",
                         fill = "white" # 设置图例项填充色,让条纹更清晰可见
                       ))) +
  # 调整填充色图例顺序,优化视觉逻辑
  scale_fill_discrete(guide = guide_legend(order = 1))

关键修复点

  • 明确美学映射:在geom_tile_pattern的局部aes中明确指定pattern = mat,避免全局映射在图例渲染时的模糊性。
  • 强制图例参数:通过guide_legend(override.aes)为图例项设置白色填充背景,解决stripe因透明背景导致的不可见问题。
  • 图例顺序调整:让填充色图例优先展示,符合热图的视觉逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 11:59:56