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

在R语言中如何将POSIXct时间序列轴扩展至数据结束时间之后

问题描述

某台温度记录仪提前停止记录,导致其绘图的X轴长度与其他记录仪的X轴不一致。希望将该X轴扩展至统一长度,结束时间设为2022-06-06 00:00:00,以便将多张图并排展示。以下是用于数据转换和绘图的三段核心代码,恳请提供调整建议:

代码片段1:日期时间格式转换

SD1b <- SaxDeep1b
SD1b$datetime <- as.POSIXct(strptime(SD1b$datetime,format="%d/%m/%Y %H:%M",tz="Australia/Brisbane"))
head(SD1b)

代码片段2:小时级数据聚合

SD1comb$datehour <- cut(as.POSIXct(SD1comb$datetime, format="%Y-%m-%d %H:%M:%S"),breaks="hour")
SD1hourlyT <-  aggregate(temp ~ datehour,SD1comb,mean)
head(SD1hourlyT)
SD1hourlyT$datehour <- as.POSIXct(strptime(SD1hourlyT$datehour,format = "%Y-%m-%d %H",
                                     tz="Australia/Brisbane"))
str(SD1hourlyT)

代码片段3:绘图代码

jpeg(file='SD1_temp.jpeg',width=19,height=10,res=1200,units="cm")
SD1temp <- ggplot(SD1hourlyT, aes(x = datehour, y = temp)) +
  geom_line(colour="black") +
  labs(x=element_blank(),y=expression("Temperature " ( degree*C)) ) +
  scale_x_datetime(date_breaks="1 month",date_labels = "%b") + #see ?strptime for labs
  scale_y_continuous(limits=c(23,33),breaks=c(23,25,27,29,31,33)) +
  theme_linedraw() +
  theme_minimal()+
    theme(axis.text.x  = element_text(colour="black",size=10),
        axis.title.x = element_text(color = "black", size=12),
        panel.grid.major = element_line(colour = "#d3d3d3"),
        panel.grid.minor = element_blank(),
        axis.text.y = element_text(colour="black",size=10),
        axis.title.y = element_text(color = "black", size=12)) +
  ggtitle("Saxon Deep 1")

调整建议

方法一:直接指定X轴范围(快速实现)

在scale_x_datetime中添加limits参数,强制X轴结束时间为目标时间,同时保留数据的起始时间,这样所有图的X轴长度就能统一。

修改后的绘图代码:

jpeg(file='SD1_temp.jpeg',width=19,height=10,res=1200,units="cm")
SD1temp <- ggplot(SD1hourlyT, aes(x = datehour, y = temp)) +
  geom_line(colour="black") +
  labs(x=element_blank(),y=expression("Temperature " ( degree*C)) ) +
  scale_x_datetime(
    date_breaks="1 month",
    date_labels = "%b",
    # 固定X轴结束时间,起始时间用数据最早值
    limits = c(min(SD1hourlyT$datehour), as.POSIXct("2022-06-06 00:00:00", tz="Australia/Brisbane"))
  ) +
  scale_y_continuous(limits=c(23,33),breaks=c(23,25,27,29,31,33)) +
  theme_linedraw() +
  theme_minimal()+
    theme(axis.text.x  = element_text(colour="black",size=10),
        axis.title.x = element_text(color = "black", size=12),
        panel.grid.major = element_line(colour = "#d3d3d3"),
        panel.grid.minor = element_blank(),
        axis.text.y = element_text(colour="black",size=10),
        axis.title.y = element_text(color = "black", size=12)) +
  ggtitle("Saxon Deep 1")
dev.off() # 务必关闭绘图设备

方法二:补全缺失时间序列(更严谨)

如果希望在记录仪停止后的时间段显示空白(而非直接拉伸轴),可以先补全从数据起始到目标结束时间的所有小时级时间点,再合并原数据,缺失温度值设为NA。

  1. 生成完整时间序列
# 获取数据起始时间
start_time <- min(SD1hourlyT$datehour)
# 生成从起始到目标结束时间的每小时序列
full_time_seq <- seq(start_time, as.POSIXct("2022-06-06 00:00:00", tz="Australia/Brisbane"), by="hour")
full_time_df <- data.frame(datehour = full_time_seq)
  1. 合并原数据与完整序列
# 左连接保留所有时间点,缺失温度设为NA
SD1hourlyT_full <- merge(full_time_df, SD1hourlyT, by="datehour", all.x=TRUE)
  1. 使用补全后的数据集绘图
jpeg(file='SD1_temp.jpeg',width=19,height=10,res=1200,units="cm")
SD1temp <- ggplot(SD1hourlyT_full, aes(x = datehour, y = temp)) +
  geom_line(colour="black") +
  labs(x=element_blank(),y=expression("Temperature " ( degree*C)) ) +
  scale_x_datetime(date_breaks="1 month",date_labels = "%b") +
  scale_y_continuous(limits=c(23,33),breaks=c(23,25,27,29,31,33)) +
  theme_linedraw() +
  theme_minimal()+
    theme(axis.text.x  = element_text(colour="black",size=10),
        axis.title.x = element_text(color = "black", size=12),
        panel.grid.major = element_line(colour = "#d3d3d3"),
        panel.grid.minor = element_blank(),
        axis.text.y = element_text(colour="black",size=10),
        axis.title.y = element_text(color = "black", size=12)) +
  ggtitle("Saxon Deep 1")
dev.off()

注意事项

  • 所有绘图务必统一使用"Australia/Brisbane"时区,避免时间偏移
  • 若要统一所有图的X轴起始时间,可将min(SD1hourlyT$datehour)替换为所有数据集的共同起始点,比如as.POSIXct("2022-01-01 00:00:00", tz="Australia/Brisbane")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 21:03:29