x轴取值不均匀时如何使用ggplot绘制连续实线?
解决方案
问题核心是原始数据为宽格式,且天数被处理为分类维度而非连续数值,导致geom_line无法按照真实的天数间隔绘制连续折线。
1. 重构数据结构
首先将宽表转为长表,提取天数的数值作为x轴连续变量,同时处理逗号分隔的小数格式:
library(tidyverse) # 宽表转长表并清洗字段 df_long <- df %>% pivot_longer(cols = starts_with("day"), names_to = "day", values_to = "value") %>% mutate( # 提取day后的数字作为连续天数 day = as.numeric(str_remove(day, "day")), # 将逗号替换为小数点后转数值格式 value = as.numeric(str_replace(value, ",", ".")) )
2. 绘制连续实线折线图
处理后的数据可直接使用geom_line绘制折线,x轴会自动按照真实的天数间隔排布:
ggplot(df_long, aes(x = day, y = value, color = factor(treatment))) + geom_line(linewidth = 1) + # 可选参数:添加对应数据点 geom_point(size = 2) + labs(x = "天数", y = "测量值", color = "处理组")
补充说明
如果仍需要使用geom_smooth的拟合线效果,添加se = FALSE参数即可关闭置信区间:
ggplot(df_long, aes(x = day, y = value, color = factor(treatment))) + geom_smooth(se = FALSE, method = "loess", linewidth = 1)
内容的提问来源于stack exchange,提问作者Gonzalo de Quesada
相关产品推荐
相关产品推荐

