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

ggpattern自定义图例与图案缩放问题:双图例及图案颜色未生效

问题修复方案

双图例问题解决

你看到两个图例是因为swimmer_plot默认生成了primary_therapy的填充图例,同时geom_col_pattern又生成了additional_therapy的图案图例,两者叠加显示。直接在swimmer_plot里关闭填充图例即可:

swimmer_plot(
  df = df, id = "study_id",
  end = "end_yr", name_fill = "primary_therapy",
  width = 0.85, color = NA,
  show.legend = FALSE  # 关闭多余的填充图例
)

图案颜色不显示黑色问题解决

你设置了pattern_color="black"但没生效,核心原因是把pattern_angle放进了aes()映射中,却没为它配置对应的刻度规则,导致图例和图形中的图案样式继承了默认灰色。

两种修复方式:

  1. 不需要按分组调整角度:直接把pattern_angle移出aes(),作为全局参数设置:
geom_col_pattern(
  aes(study_id, end_yr, pattern = additional_therapy),  # 移除pattern_angle的映射
  fill = NA, na.rm=FALSE, show.legend=TRUE, width=0.85,
  pattern_spacing = 0.01, pattern_color = "black", pattern_size = 0.5, 
  pattern_linetype = 1, pattern_orientation="vertical",
  pattern_angle = 45  # 统一设置角度,放在aes外
)
  1. 需要按分组调整角度:添加scale_pattern_angle_manual(),并让它和图案图例同名以合并显示:
geom_col_pattern(
  aes(study_id, end_yr, pattern = additional_therapy, pattern_angle = additional_therapy),
  fill = NA, na.rm=FALSE, show.legend=TRUE, width=0.85,
  pattern_spacing = 0.01, pattern_color = "black", pattern_size = 0.5, 
  pattern_linetype = 1, pattern_orientation="vertical"
) +
scale_pattern_angle_manual(
  name = "Additional Therapy",  # 和图案图例同名,自动合并
  values = c("S" = 45, "NA" = 0, "V+S" = 0)  # 按需设置不同分组的角度
)

完整修正代码(以不需要分组角度为例)

df <- data.frame(
  study_id = c(3, 3, 3), primary_therapy = c("Si", "Si", "Si"),
  additional_therapy = c("NA", "S", "V+S"), end_yr = c(0.08, 0.39, 3.03)
)

swimmer_plot(
  df = df, id = "study_id",
  end = "end_yr", name_fill = "primary_therapy",
  width = 0.85, color = NA,
  show.legend = FALSE
) + 
geom_col_pattern(
  aes(study_id, end_yr, pattern = additional_therapy),
  fill = NA, na.rm=FALSE, show.legend=TRUE, width=0.85,
  pattern_spacing = 0.01, pattern_color = "black", pattern_size = 0.5, 
  pattern_linetype = 1, pattern_orientation="vertical",
  pattern_angle = 45
) +
scale_pattern_manual(
  name="Additional Therapy", 
  values = c("S"="stripe","NA"="none","V+S"="circle")
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:20:40