R语言绘图日期格式异常:显示奇怪数字而非历史日期
解决图表日期显示异常及日期转换错误问题
问题根源
- 日期转换逻辑错配:你用
lubridate::mdy()解析日期,但数据里的date列是yyyy-mm-dd格式(比如2022-06-29),mdy()是按「月-日-年」规则解析的,会直接解析失败,默认生成当前日期。 - 绘图函数用错场景:
plot.ts()是专门给时间序列对象(ts类型)用的绘图函数,它会把x轴显示成序列的索引数字,而非你传入的实际日期值。
修正步骤
1. 正确转换日期格式
把mdy()换成匹配数据格式的lubridate::ymd():
library(lubridate) # 替换原日期转换代码 df_peg$date <- ymd(df_peg$date)
可以用class(df_peg$date)检查,返回值应为"Date",说明转换成功。
2. 用基础plot函数绘制折线图,手动配置日期轴
放弃plot.ts(),用普通plot()函数配合axis.Date()来格式化x轴的日期显示:
par(mfrow = c(1, 2)) # 绘制折线图,先隐藏默认x轴 plot(x = df_peg$date, y = df_peg$BUSDPEG, type = "l", col = "#1F4690", ylab = "USD", xlab = "", main = "", xaxt = "n") abline(h = 0) # 添加格式化的日期轴,按月份显示,垂直排版避免重叠 axis.Date(side = 1, at = seq(min(df_peg$date), max(df_peg$date), by = "month"), format = "%Y-%m", las = 2) mtext("BUSD Deviations from Peg", side = 3, line = 1) # 绘制直方图 hist(df_peg$BUSDPEG, xlim = c(-0.01, 0.01), main = "", col = "#D61C4E", xlab = "Deviation")
可选调整
如果需要更精细的日期显示,可修改axis.Date()的参数:
by:改成"week"或"day"来调整刻度密度format:改成"%m/%d"显示月日,或"%Y-%m-%d"显示完整日期
内容的提问来源于stack exchange,提问作者user17401508
相关产品推荐
相关产品推荐

