使用R中ts函数绘制日度时间序列图时如何修改x轴日期显示
R语言日度时间序列x轴显示具体日期解决方案
你遇到的问题是ts类日度数据默认绘图时x轴显示为小数格式的年份,可通过以下两种方案调整:
方案1:使用R基础绘图系统自定义x轴
首先生成对应日期序列,再手动绘制x轴标签:
# 加载示例数据 ts_data <- structure(c(66588, 65998, 65169, 61602, 34027, 35742, 59925, 71704, 75102, 75495, 69609, 80508, 32321, 70764, 79876, 75412, 85663, 76178, 43812, 36239, 83926, 90303, 86982, 90570, 79069, 47774, 49293, 82493, 89992, 100158, 84245, 85948, 44326, 38927, 84494, 90638, 91097, 70238, 43515, 31359, 28645, 86979, 92625, 86652, 93317, 71832, 37017, 35785, 82186, 73513, 73174, 85774, 67636, 42980, 30624, 69381, 79719, 45178, 69105, 71137, 32572, 28636, 72140, 79726, 69389, 68333, 66964, 28935, 24619, 77359, 73295, 73380, 78886, 63430, 38911, 25200, 72715, 76692, 74592, 85536, 67009, 40709, 30148, 75445, 79219, 82039, 76855, 76490, 35819, 37498, 73453, 80486, 67467, 49768, 79670, 43520, 30434, 78926, 95601, 83391, 37936, 66017, 39637, 37156, 52911, 85748, 88092, 85149, 78700, 37948, 39846, 80609, 95367, 74042, 98832, 82288, 44178, 38903, 87822, 115228, 73602, 79277, 64134, 33704, 27804, 64903, 43836, 65163, 65165, 54556, 27783, 22703, 62504, 54022, 53725, 57737, 48504, 20937, 17031, 45022, 57736, 52789, 45591, 34339, 34126, 15271, 27592, 54517, 49757, 108732, 38091, 18129, 18999, 41411, 48013, 42283, 40904, 37582, 20503, 15143, 32316, 40716, 40054, 42159, 43033, 13893, 12085, 34885, 32443, 39982, 33933, 31142, 13957, 14471, 37613, 41714, 36315, 33887, 28388, 14404, 13103, 30872, 30671, 31024, 27345, 24699, 13210, 10466, 24589, 27345, 26280, 25565, 21804, 12915, 9154, 14304, 13771, 30891, 15951, 14314, 10615, 6645, 13406, 14780, 34407, 11202, NA, 9458, 7884, -573, 36473, 24611, 19438, 15688, 8668, 14423, 15395, 17756, 27527, 18578, 13466, 9004, 10425, 20528, 17893, 15591, 18172, 16451, 8639, 6918, 7359, 7852, 14288, 15239, 11250, 5738, 7446, 12969, 15609, 16853, 14502, 11716, 6204, 5797, 13424, 17184, 15268, 11965, 10693, 6761, 3838, 6431, 14661, 13352, 13321, 11866, 6115, 5638, 10948), .Tsp = c(2021, 2021.70684931507, 365), class = "ts") # 生成对应日期序列 date_seq <- seq.Date(as.Date("2021-01-01"), by = "day", length.out = length(ts_data)) # 绘图时关闭默认x轴 plot(ts_data, xaxt = "n", xlab = "日期", ylab = "数值") # 自定义x轴,可调整间隔参数控制标签密度,此处每隔15天显示一次 axis(1, at = seq(1, length(ts_data), 15), labels = date_seq[seq(1, length(ts_data), 15)], las = 2)
参数说明:las = 2 表示x轴标签垂直显示,避免重叠。
方案2:使用ggplot2绘制(更灵活可调)
通过将ts数据转为带日期索引的格式,直接用ggplot的日期轴配置:
# 加载依赖包 library(ggplot2) library(zoo) # 转为带日期索引的zoo对象 zoo_data <- zoo(ts_data, order.by = date_seq) # 转为数据框 df <- data.frame( date = index(zoo_data), value = coredata(zoo_data) ) # 绘图 ggplot(df, aes(x = date, y = value)) + geom_line() + # 调整日期间隔和显示格式,此处每2周显示一次,格式为年-月-日 scale_x_date(date_breaks = "2 weeks", date_labels = "%Y-%m-%d") + # 调整x轴标签角度避免重叠 theme(axis.text.x = element_text(angle = 45, hjust = 1)) + labs(x = "日期", y = "数值")
如果需要调整标签显示密度,修改date_breaks参数即可:比如填"1 week"为每周显示,"1 month"为每月显示。
内容的提问来源于stack exchange,提问作者ahad lone
相关产品推荐
相关产品推荐

