使用ggplot呈现时间点不均匀间距的技术求助
解决ggplot绘制不均匀时间点轨迹图的问题
问题核心在于你当前的x轴映射的是Sweep索引值(比如1、2、3...),而非实际年龄数值。scale_x_continuous(labels = age)只是替换了刻度显示的文本,但刻度的位置仍基于Sweep的连续整数,所以间距始终相等。要实现不均匀间距,需将x轴直接映射为实际年龄数值,具体步骤如下:
步骤1:将Sweep转换为实际年龄数值
首先在你的数据中生成一列实际年龄的数值型变量,假设Sweep是对应年龄点的索引(比如1对应13岁,2对应15岁,以此类推),可以用以下代码转换:
# 定义采集的年龄点 age <- c(13,15,17,21,24,27) # 为long_dta添加实际年龄列 long_dta$age_num <- age[long_dta$Sweep]
如果Sweep不是连续整数,而是其他标识(比如字符串或非连续数字),可以用match函数匹配:
long_dta$age_num <- age[match(long_dta$Sweep, unique(long_dta$Sweep))]
步骤2:修改ggplot代码,映射实际年龄到x轴
将x轴的映射变量从Sweep改为age_num,同时通过breaks参数指定要显示的刻度为采集的年龄点:
p <- ggplot(long_dta, aes(x = age_num, y = value, group = numericID, colour = gmm2_grp)) + geom_line() + geom_smooth(aes(group = gmm2_grp), method = "loess", size = 2, se = FALSE) + scale_y_continuous(limits = c(0, 40)) + scale_x_continuous(breaks = age, labels = age) + # 指定刻度位置和显示文本为采集的年龄 labs(x = "Age(years)", y = "total_score", colour = "Latent Class")
效果说明
修改后,x轴会按照年龄的实际数值间距绘制:
- 13到15岁、15到17岁间距为2
- 17到21岁间距为4(是前两段的2倍宽度)
- 21到24岁、24到27岁间距为3
完全符合你需要的“拉伸”显示不均匀时间点的需求。
内容的提问来源于stack exchange,提问作者Courtney
相关产品推荐
相关产品推荐

