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()映射中,却没为它配置对应的刻度规则,导致图例和图形中的图案样式继承了默认灰色。
两种修复方式:
- 不需要按分组调整角度:直接把
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外 )
- 需要按分组调整角度:添加
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
相关产品推荐
相关产品推荐

