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

季度时间序列ts3绘图X轴季度刻度显示异常问题

为季度时间序列图添加正确的季度刻度标签

问题背景

用户拥有如下季度时间序列ts3:

ts3       Qtr1      Qtr2      Qtr3      Qtr4
1996                      99.53661 100.00000
1997  99.97004  99.81439  99.83626  99.89607
1998  99.63327  99.67089  99.08486  95.40506
1999  92.33478  90.40498  89.15398  88.45411
2000  88.07940  87.90297  87.83893  87.88825
2001  88.00351  88.16990  88.27630  88.38974
2002  88.53825  88.66707  88.78324  88.85596
2003  88.90146  88.86197  88.75703  88.69979
2004  88.60257  88.44168  88.21923  87.90716
2005  87.51697  87.12123  86.31867  85.77275
2006  84.69936  83.70466  82.70524  82.07538
2007  81.09732  80.31627  80.40409  80.90472
2008  81.25585  81.74333  82.57073  84.78822
2009  85.62749  85.84770  80.41626  80.37309
2010  80.19556  79.87521  77.60659  77.71701
2011  77.53630  77.38652  77.62422  76.96972
2012  76.85396  77.25449  77.66925  77.19131
2013  77.33289  76.16315  76.15370  75.66456
2014  75.79406  73.45276  74.28542  74.18886
2015  74.20661  73.91630  73.80376  74.02166
2016  74.06891  73.37797  73.99337  73.97490
2017  74.03728  74.15334  73.76682  73.75985
2018  73.68989  73.96065  74.33401  73.67997
2019  72.97971  73.04950  73.11735  73.17182
2020  72.35422  69.24294  66.48046  66.81105
2021  65.68547  57.57196  55.00889  56.00235
2022  55.61863  55.86456  55.32120  56.84359
2023  56.59352                           

使用base::plot(ts3, ylab = "TCI", xlab = "Quarters")绘图时,X轴仅显示2000-2020年的年度刻度,无法展示季度信息。尝试自定义轴的代码无效果:

plot(ts3, ylab = "TCI", xaxt = "n")
axis(1, at=seq(1, length(ts3), 1), labels = seq.Date(as.Date("1996-07-01"), as.Date("2023-01-01"), by = "quarter"))

解决方案

方法一:Base R 自定义坐标轴

问题出在axis函数的at参数使用了从1开始的序列,但ts对象的X轴坐标对应的是时间数值(如1996Q3对应1996.5,1996Q4对应1996.75,1997Q1对应1997),而非简单的索引值。正确步骤如下:

  1. 提取ts3的时间索引:用time(ts3)获取每个观测对应的时间数值。
  2. 生成季度标签:用format(time(ts3), "%Y Q%q")生成类似"1996 Q3"的标签。
  3. 绘图并自定义轴,调整标签角度避免重叠。

完整代码:

# 提取时间和标签
ts_time <- time(ts3)
ts_labels <- format(ts_time, "%Y Q%q")

# 绘图,关闭默认X轴
plot(ts3, ylab = "TCI", xlab = "Quarters", xaxt = "n")

# 添加自定义X轴,调整标签角度为45度避免重叠
axis(1, at = ts_time, labels = ts_labels, las = 2, cex.axis = 0.7)
  • las=2让标签垂直显示,避免拥挤;cex.axis=0.7缩小标签字号。
  • 如果觉得标签过密,可以选择每隔N个季度显示一次,比如每年显示一次:
    # 筛选每年第一个季度的时间点和标签
    year_starts <- ts_time[cycle(ts3) == 1]
    year_labels <- format(year_starts, "%Y")
    axis(1, at = year_starts, labels = year_labels, las = 2)
    

方法二:使用forecast包快速绘图

forecast包的autoplot函数会自动识别时间序列的频率,默认生成带季度刻度的图表,无需手动调整:

library(forecast)
autoplot(ts3, ylab = "TCI", xlab = "Quarters")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:28:09