R语言中修改时间序列图(ts plot)X轴标签为实际日期的问题
解决R语言ts绘图X轴标签替换为实际日期的问题
最近我在处理R语言时间序列绘图时卡壳了——用ts()生成的序列图,X轴默认显示的是year.samplenumber这种格式的标签,我想换成数据里的实际日期,但翻了好几个相关帖子的方法都不管用。我的相关数据和代码片段如下:
我的数据
mm17 date fullband band1 1 2015/1/14 109.0873 107.0733 2 2015/1/15 110.1434 109.1999 3 2015/1/16 109.8811 108.6232 4 2015/1/17 110.4814 109.8164 5 2015/1/18 110.1513 109.2764 6 2015/1/19 110.3266 109.5860
我的代码片段
mm17.ts <- ts(mm17.perday[,2], frequency=365, start=c(2015, 14)) cols <- c("red", "green") # 原代码截断,这里补充了合理收尾 plot(mm17.ts, col=cols[1])
亲测有效的解决方案
方案一:用ggplot2直接基于日期列绘图(最省心)
既然已经有现成的date列,完全不用依赖ts对象的默认轴标签,用ggplot2能精准控制X轴显示实际日期:
- 第一步:把
date列转换成标准日期格式
mm17$date <- as.Date(mm17$date, format="%Y/%m/%d")
- 第二步:用ggplot2绘制时间序列图
library(ggplot2) ggplot(mm17, aes(x=date, y=fullband)) + geom_line(color="red") + scale_x_date(date_labels="%Y-%m-%d", date_breaks="1 day") + labs(x="日期", y="fullband数值") + theme(axis.text.x = element_text(angle=45, hjust=1)) # 旋转标签避免重叠
方案二:给基础绘图的ts对象手动替换X轴标签
如果坚持要用基础包的plot.ts(),可以手动计算每个时间点对应的日期,然后替换轴标签:
- 第一步:生成和ts序列长度匹配的日期向量
# 获取序列长度 n <- length(mm17.ts) # 从起始日期生成连续日期 dates <- seq(as.Date("2015-01-14"), by="1 day", length.out=n)
- 第二步:绘图时隐藏默认X轴,添加自定义标签
plot(mm17.ts, xaxt="n", col="red") # xaxt="n" 关闭默认X轴 axis(1, at=1:n, labels=format(dates, "%Y-%m-%d"), las=2) # las=2 让标签垂直显示
这样就能把X轴换成你想要的实际日期啦!
内容的提问来源于stack exchange,提问作者Anke
相关产品推荐
相关产品推荐

