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

Rbeast时间序列绘图X轴显示异常数值而非日期的解决方法

Rbeast日尺度时间序列绘图X轴日期显示异常修复

问题背景

研究对象为澳大利亚新南威尔士州(NSW)各区域的环境空气污染问题,使用Rbeast开展日尺度时间序列分解分析,核心目标是探究新冠疫情封控时段前后的时间序列变点特征。

问题描述

编写循环代码逐区域、逐污染物开展数据分析时,beast结果绘图的X轴(日期轴,预期显示2012-2022年的年份刻度,格式为2021-01-01类标准日期)显示异常,出现16000、17000、18000这类无意义数值。
异常效果示例:
beast绘图X轴异常显示效果
原始实现代码如下:

beast_output = list()

target_pollutants = c("PM10", "OZONE", "NO", "NO2")
target_sites = c("WOLLONGONG", "MUSWELLBROOK", "SINGLETON", "CAMBERWELL", "WAGGAWAGGANORTH", "RICHMOND", "CAMDEN", "CHULLORA", "EARLWOOD",  "WALLSEND", "BERESFIELD", "BARGO", "BRINGELLY", "PROSPECT", "STMARYS", "OAKDALE", "RANDWICK", "ROZELLE", "NEWCASTLE", "KEMBLAGRANGE", "ALBIONPARKSOUTH")
for (poll in target_pollutants) {
  beast_output[[poll]] = list()
  df = time_by_poll[[poll]]  #  grab the target df
  sites = colnames(df)
  sites$Date = NULL  #  clear date from the list
  for (site in sites) {
    ts = ts(df[[site]], start=min(df$Date), end=max(df$Date))
    beast_results = beast(ts)
    # plot(beastie_resulty)
    beast_output[[poll]][[site]] = beast_results
  }
}


plot (beast_results[["OZONE"]][["RANDWICK"]])

问题原因

X轴显示的16000、17000这类数值是R中Date类型的底层存储值:R内置Date类型以1970-01-01为起点按天计数,研究涉及的2012-2022年时段对应的计数值刚好落在15000-19000区间。
问题根源是时间序列构造逻辑存在错误:

  • 基础ts()函数对日期类型兼容性差,直接把Date值传给start/end参数时,会自动剥离日期格式属性,仅保留底层数值
  • 创建ts对象时未指定日尺度对应的时间步长参数,beast无法识别输入的时间维度为日期,绘图时直接输出了原始数值。
    另外原代码还存在一处逻辑bug:sites = colnames(df)得到的是字符型向量,对字符向量执行sites$Date = NULL属于无效操作,运行时会直接报错。

修复方案

Rbeast原生支持传入带明确时间索引的输入,不需要强制转换为基础ts()对象,直接在调用beast()时通过time参数传入对应的日期向量即可自动识别日期格式,修正后的可运行代码如下:

beast_output = list()

target_pollutants = c("PM10", "OZONE", "NO", "NO2")
for (poll in target_pollutants) {
  beast_output[[poll]] = list()
  df = time_by_poll[[poll]]
  # 正确提取污染物监测点列名,排除Date列
  sites = colnames(df)[!colnames(df) %in% "Date"]
  # 提前提取日期向量,避免循环内重复计算
  date_vec = df$Date
  for (site in sites) {
    # 直接传入浓度向量,通过time参数绑定日期索引,指定日尺度步长
    beast_results = beast(df[[site]], time = date_vec, deltat = "day")
    beast_output[[poll]][[site]] = beast_results
  }
}

# 绘图时将自动识别日期格式,输出标准年月日刻度
plot(beast_output[["OZONE"]][["RANDWICK"]])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 14:57:22