R中共享时间X轴双折线图:时间轴格式化及序列间隙修复求助
解决GME收益率与Diamond Hands双折线图的时间轴及间隙问题
核心问题分析
- 时间轴显示异常:
strptime生成的POSIXlt类型不兼容axis.Date,导致时间轴消失;POSIXct才是适合绘图的时间类型 - 时间间隙问题:原始数据存在时间断点,折线直接连接断点不符合实际时间逻辑
完整解决方案代码
library(tidyverse) # 加载测试数据 df <- tibble( time = c("2021-02-16 10:00:00", "2021-02-16 11:00:00", "2021-02-16 21:00:00", "2021-02-17 08:00:00", "2021-02-17 09:00:00", "2021-02-17 10:00:00", "2021-02-17 11:00:00", "2021-02-17 12:00:00", "2021-02-17 18:00:00", "2021-02-17 19:00:00", "2021-02-17 20:00:00"), returns = c(-0.0037586920, -0.0157776108, -0.50761421, -0.00142141, -0.48694561, -0.45861415, -0.56869411, -0.21356147, -0.21345648, -0.56521356, -0.75656187), Diamond.Hands = c(0.4583333, 0.5000000, 0.43948956, 0.89114565, 0.15894415, 0.35784893, 0.32154861, 0.48692132, 0.12345671, 0.23148489, 0.35258644) ) # 转换为POSIXct类型(适配绘图的标准时间格式) df$time <- as.POSIXct(df$time, format = "%Y-%m-%d %H:%M", tz = 'GMT') # 补全时间间隙:生成每小时的完整时间序列,缺失数据保留NA(折线自动断开) full_df <- df %>% complete(time = seq(min(time), max(time), by = "hour")) #################### 绘制双折线图 ##################### par(mar=c(5, 4, 4, 6) + 0.1) # 绘制GME收益率折线 plot(full_df$time, full_df$returns, pch=16, axes=FALSE, ylim=c(-0.8, 0), xlab="", ylab="", type="l", col="black", main="GME Returns and Diamond Hands Popularity") axis(2, ylim=c(-0.8, 0), col="black", las=1) mtext("GME Returns", side=2, line=2.5) box() par(new=TRUE) # 绘制Diamond Hands热度折线 plot(full_df$time, full_df$Diamond.Hands, pch=15, xlab="", ylab="", ylim=c(0,1), axes=FALSE, type="l", col="red") mtext("Diamond Hands", side=4, col="red", line=4) axis(4, ylim=c(0,1), col="red", col.axis="red", las=1) # 绘制格式化时间轴 axis.POSIXct(1, at = seq(min(full_df$time), max(full_df$time), by = "2 hours"), format = "%m-%d %H:%M", las=2) mtext("Time", side=1, col="black", line=3.5) # 添加图例 legend("topleft", legend=c("GME Returns","Diamond Hands Popularity"), text.col=c("black","red"), pch=c(16,15), col=c("black","red"), bty="n")
关键修复说明
- 时间类型适配:替换
strptime为as.POSIXct,生成axis.POSIXct支持的时间类型,解决时间轴消失问题 - 间隙处理:用
tidyr::complete生成连续时间序列,缺失值保留NA,折线会在时间断点处自动断开,还原真实时间逻辑 - 时间轴优化:通过
axis.POSIXct自定义刻度间隔(2小时)和标签格式(月-日 时:分),设置las=2避免标签重叠 - Y轴范围修正:调整收益率Y轴范围为
c(-0.8,0),适配数据中的极值
内容的提问来源于stack exchange,提问作者reCaptcha
相关产品推荐
相关产品推荐

