如何在ggplot2的geom_segment线段中添加带双斜线的中断缺口
实现治疗线段中断效果的方案
实现思路
- 将原单条治疗线段拆分为前后两段,在期望添加缺口的位置(如线段中点)预留固定宽度的空白间隙
- 新增独立图层在间隙位置绘制坐标轴常用的双斜线中断样式,视觉上实现线段中断效果
具体实现代码
第一步:数据预处理
先对原数据集做处理,拆分线段、计算中断位置:
library(dplyr) # 设定缺口宽度(单位:天,可根据需求调整) gap_width <- 2 half_gap <- gap_width / 2 # 预处理数据:拆分线段,计算中断位置 data_processed <- data %>% mutate( # 计算原线段中点 mid_point = (start + stop) / 2, # 前半段终点 seg1_end = mid_point - half_gap, # 后半段起点 seg2_start = mid_point + half_gap )
第二步:修改绘图代码
library(ggplot2) colors <- c("X" = "dodgerblue3", "Y" = "red2", "Death" = "black") event_symbols <- c("X" = "\u25CF", "Y" = "\u25CF", "Death" = "\u2020") five_day_lines <- seq(0, 90, 5) day_lines <- 1:90 day_lines <- day_lines[!day_lines %in% five_day_lines] data_processed$id <- factor(data_processed$id, levels = data_processed$id[order(data_processed$time_to_event, decreasing = T)]) ggplot(data = data_processed) + geom_hline(yintercept = five_day_lines, color = "grey", alpha = .35) + geom_hline(yintercept = day_lines, color = "grey", alpha = .25) + # 绘制前半段治疗线段 geom_segment(aes(x = id, xend = id, y = start, yend = seg1_end), color = "dimgray", size = 1) + # 绘制后半段治疗线段 geom_segment(aes(x = id, xend = id, y = seg2_start, yend = stop), color = "dimgray", size = 1) + # 绘制中断双斜线,可替换为你需要的其他中断符号 geom_text(aes(x = id, y = mid_point, label = "//"), color = "dimgray", size = 3, angle = 30) + geom_point(aes(x = id, y = time_to_event, shape = event, color = event), size = 3) + scale_y_continuous(limits = c(0,90), breaks = c(seq(0, 90, 5)), name = "Days after study inclusion") + scale_x_discrete(name = "ID") + coord_flip() + scale_color_manual(values = colors, breaks = c()) + scale_shape_manual(values = event_symbols, breaks = c("X", "Y", "Death"), guide = guide_legend(override.aes = list(color = c("dodgerblue3", "red2", "black")))) + theme(legend.position = "bottom", legend.title = element_text(size=12, face="bold"), panel.background = element_blank(), legend.background = element_blank()) + labs(color="Medication", shape="Event type")
参数调整说明
- 可以修改
gap_width调整缺口的宽度,适配不同的图表缩放比例 - 可以修改
geom_text的angle参数调整双斜线的倾斜角度,size参数调整符号大小 - 如果需要更换中断样式,只需要替换
geom_text的label参数内容即可,比如改为单斜线、或者自定义的Unicode符号
内容的提问来源于stack exchange,提问作者fbeese
相关产品推荐
相关产品推荐

