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

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")

关键修复说明

  1. 时间类型适配:替换strptime为as.POSIXct,生成axis.POSIXct支持的时间类型,解决时间轴消失问题
  2. 间隙处理:用tidyr::complete生成连续时间序列,缺失值保留NA,折线会在时间断点处自动断开,还原真实时间逻辑
  3. 时间轴优化:通过axis.POSIXct自定义刻度间隔(2小时)和标签格式(月-日 时:分),设置las=2避免标签重叠
  4. Y轴范围修正:调整收益率Y轴范围为c(-0.8,0),适配数据中的极值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 16:07:06