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

如何在R语言中修改时间序列图X轴,去除无数据年份间隔

问题:R时间序列图X轴跳过缺失年份,实现均匀刻度

绘制时间序列图时,2006年无数据,但图表仍显示该年份的间隔,希望X轴刻度均匀,让2005年直接衔接2007年。尝试将年份转为字符型无效,附数据及原始代码如下:

# Data.frame containing data to plot
model_bind_mean <- data.frame(
  year = c(2000,2001,2002,2003,2004,2005,2007,2008,2009,2010,2011,2012,2013),
  Predicted = c(2.489231e-08,9.163199e-09,3.714457e-08,3.815457e-08,1.976398e-08,6.348324e-08,6.567202e-09,8.087554e-09,8.474279e-09,1.487757e-08,1.031034e-08,9.974196e-09,2.616392e-07),
  SE = c(5.396462e-06,1.989060e-06,6.725223e-06,7.461874e-06,5.591814e-06,1.260939e-05,1.439420e-06,2.021963e-06,2.267154e-06,2.722827e-06,1.941836e-06,2.073215e-06,5.847537e-05),
  lower = c(8.109053e-139,1.901918e-129,2.632171e-133,5.009737e-132,1.652577e-133,1.076752e-130,1.947562e-129,6.891736e-134,3.261077e-142,7.227378e-129,4.652030e-133,1.279174e-131,1.255000e-128),
  upper = rep(1,13)
)

legend_year <- c(2000,2001,2002,2003,2004,2005,2007,2008,2009,2010,2011,2012,2013)

# Plot
plot(legend_year,model_bind_mean$Predicted, ylim = c(0,1),
     las = 1,pch = 15,font.lab = 2, col='gold4',
     xlab = 'Year', ylab = 'Y axis',
     bty = 'l',xaxt = 'n',yaxt = 'n',
     main="Title")

lines(legend_year,model_bind_mean$Predicted,lwd = 2, col = 'gold4')

arrows(x0=legend_year, y0=model_bind_mean$Predicted-model_bind_mean$SE,
       y1=model_bind_mean$Predicted+model_bind_mean$SE, code = 3, angle = 90, lty = 1,
       length = 0.03,col = rgb(0,0,0,0.3))

axis(1, at = legend_year ,
     labels = T,tck = 0.02,
     cex.axis = 0.75)

axis(2, at = seq(0,1,0.1),
     labels = seq(0,1,0.1),las = 1,tck = 0.02,
     cex.axis = 0.75)
解决方案

问题根源是R将年份视为数值型变量,会按照数值的实际间距分配X轴位置,缺失的2006年自然会留下空位。解决核心是让每个数据点在X轴上按顺序等间距排列,再替换刻度标签为对应年份。

修改后的完整代码:

# 先确保数据框结构正确(如果还没定义)
model_bind_mean <- data.frame(
  year = c(2000,2001,2002,2003,2004,2005,2007,2008,2009,2010,2011,2012,2013),
  Predicted = c(2.489231e-08,9.163199e-09,3.714457e-08,3.815457e-08,1.976398e-08,6.348324e-08,6.567202e-09,8.087554e-09,8.474279e-09,1.487757e-08,1.031034e-08,9.974196e-09,2.616392e-07),
  SE = c(5.396462e-06,1.989060e-06,6.725223e-06,7.461874e-06,5.591814e-06,1.260939e-05,1.439420e-06,2.021963e-06,2.267154e-06,2.722827e-06,1.941836e-06,2.073215e-06,5.847537e-05),
  lower = c(8.109053e-139,1.901918e-129,2.632171e-133,5.009737e-132,1.652577e-133,1.076752e-130,1.947562e-129,6.891736e-134,3.261077e-142,7.227378e-129,4.652030e-133,1.279174e-131,1.255000e-128),
  upper = rep(1,13)
)

# 创建等间距的X轴位置索引
x_pos <- 1:nrow(model_bind_mean)

# Plot
plot(x_pos, model_bind_mean$Predicted, ylim = c(0,1),
     las = 1,pch = 15,font.lab = 2, col='gold4',
     xlab = 'Year', ylab = 'Y axis',
     bty = 'l',xaxt = 'n',yaxt = 'n',
     main="Title")

lines(x_pos, model_bind_mean$Predicted,lwd = 2, col = 'gold4')

arrows(x0=x_pos, y0=model_bind_mean$Predicted-model_bind_mean$SE,
       y1=model_bind_mean$Predicted+model_bind_mean$SE, code = 3, angle = 90, lty = 1,
       length = 0.03,col = rgb(0,0,0,0.3))

# 设置X轴刻度:位置是索引,标签是对应年份
axis(1, at = x_pos,
     labels = model_bind_mean$year, tck = 0.02,
     cex.axis = 0.75)

axis(2, at = seq(0,1,0.1),
     labels = seq(0,1,0.1),las = 1,tck = 0.02,
     cex.axis = 0.75)

关键修改说明

  1. 用x_pos <- 1:nrow(model_bind_mean)生成等间距的索引值,作为X轴的实际位置,确保每个数据点之间的间距完全一致。
  2. 将plot、lines、arrows函数中的X轴参数从legend_year替换为x_pos,让图形元素按索引排列。
  3. 设置X轴刻度时,at参数用索引位置,labels参数用对应的年份值,这样视觉上显示的是年份,但实际X轴是等间距的,不会出现2006年的空位。

内容的提问来源于stack exchange,提问作者user18725416

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:25:23