使用ggpattern:NA值隐藏图案后后续图案无法显示的问题咨询
解决ggpattern中NA值对应分段不显示图案且后续图案正常显示的问题
你的问题根源在于叠加绘制的矩形互相覆盖,且没有正确定义每个治疗阶段的时间段区间。以下是修正方案:
步骤1:修正数据结构
首先为每个阶段添加起始时间(start),明确每个治疗阶段的时间区间(从上个阶段的结束时间到当前阶段的结束时间):
library(swimplot) library(ggpattern) library(tidyverse) df <- data.frame( study_id = c(3, 3, 3,3), primary_therapy = c("Si", "Si", "Si", "Si"), additional_therapy = c("NA", "S", "NA", "V+S"), end_yr = c(0.08, 0.39, 3.03, 3.4) ) %>% arrange(end_yr) %>% # 按时间顺序排序 mutate( start = lag(end_yr, default = 0), # 每个阶段的起始时间为前一个阶段的结束时间 duration = end_yr - start # 计算阶段时长 )
步骤2:替换geom_col_pattern为geom_rect_pattern
使用geom_rect_pattern绘制每个独立的时间分段,避免叠加覆盖,同时确保每个分段的图案正确显示:
swimmer_plot( df = df %>% slice(1), # 仅传入一行定义游泳条的总长度 id = "study_id", end = max(df$end_yr), # 游泳条总长度为最大的结束时间 name_fill = "primary_therapy", width = 0.85, color = NA ) + geom_rect_pattern( data = df, aes( xmin = study_id - 0.85/2, # 匹配游泳条的宽度 xmax = study_id + 0.85/2, ymin = start, # 阶段起始时间 ymax = end_yr, # 阶段结束时间 pattern = additional_therapy ), color = NA, fill = NA, show.legend = FALSE, pattern_spacing = 0.01, pattern_fill = "black", pattern_color = NA, pattern_size = 0.5, pattern_density = 0.1, pattern_linetype = 0.5, pattern_orientation = "vertical" ) + scale_pattern_manual( name = "Additional Therapy", values = c("S"="stripe", "V"="circle", "V+S"="crosshatch", "NA"="none") )
关键说明
- 用
geom_rect_pattern替代geom_col_pattern:可以精准控制每个时间分段的位置,避免叠加覆盖问题。 - 定义
start列:明确每个治疗阶段的时间区间,确保每个分段独立显示。 - 游泳条总长度设置为最大
end_yr:保证游泳条覆盖所有阶段的时间范围。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

