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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:15:35