如何使用ggplot绘制患者收入、转诊与预约等待时长区间图
你要的这类区间展示图用ggplot2的geom_linerange即可实现,以下是完整可运行代码:
# 加载依赖包 library(ggplot2) # 模拟数据(和你提供的代码一致) set.seed(1) income<-sort(rep(seq(10,105,5),20)) referral<-runif(400,10,20)+income appointment<-referral+runif(400,10,20)+income df<-data.frame(cbind(income,referral,appointment)) df<-df[order(df$income,df$referral),] # 数据预处理:生成同收入组内的个体序号,用于避免线段重叠 df$group_id <- ave(1:nrow(df), df$income, FUN = seq_along) # 绘图代码 ggplot(df, aes(x = income + (group_id - median(group_id)) * 0.15)) + # 绘制转诊到预约的等待时长区间线段 geom_linerange(aes(ymin = referral, ymax = appointment), color = "gray30", size = 0.25, alpha = 0.8) + # 可选:添加两端点标记,红色为转诊等待时长,蓝色为预约等待时长 geom_point(aes(y = referral), color = "#d92121", size = 0.7) + geom_point(aes(y = appointment), color = "#2161d9", size = 0.7) + # 坐标轴与主题设置 scale_x_continuous(name = "收入", breaks = seq(10, 105, 5)) + ylab("等待时长") + ggtitle("不同收入患者转诊至首次预约等待时长分布") + theme_bw(base_size = 12)
说明:代码里给同收入组的个体加了微小的x轴偏移,避免同一收入水平的线段完全重叠影响可读性,如果不需要偏移,直接把x参数设置为income,删掉偏移计算逻辑即可。你提到的这类图确实常被称为高低图,非常适合展示同一个体两个关联指标的差值区间。
内容的提问来源于stack exchange,提问作者Stephen Clark
相关产品推荐
相关产品推荐

