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

自定义日期格式数据集的Sequential Mann Kendall测试绘图轴标签问题

解决Sequential Mann Kendall测试绘图X轴显示年份的问题

你的核心问题是sqmk函数默认以数据点的整数索引作为X轴刻度,没有关联你的自定义日期信息。以下是修改后的代码和关键调整:

修改后的函数代码

innovtrend <- function(dataset_updated, column, date_col, column_name) {
  # 提取目标数据列与日期列
  column_vector <- dataset_updated[[column]]
  date_strings <- dataset_updated[[date_col]]
  
  # 转换自定义日期格式为年份(适配Jan-1=1901的规则)
  years <- 1900 + as.integer(sub("-", "", date_strings, fixed = TRUE))
  
  # 生成保存路径
  filename <- paste(column, ".png", sep = "")
  save_path <- file.path("E:/4-1 papers/project/sqmk/images/", filename)
  png(file = save_path, width = 865, height = 540)
  
  # 运行sqmk绘图后替换X轴
  sqmk(column_vector, 1901)
  # 自定义X轴:用实际年份替换整数刻度,las=2避免标签重叠
  axis(1, at = seq_along(years), labels = years, las = 2)
  
  dev.off()
}

关键调整说明

  • 移除attach:直接通过数据集索引提取列,避免环境变量冲突,提升代码稳定性。
  • 日期转换:针对Jan-1对应1901年的规则,提取日期字符串中的数字部分,加上1900得到实际年份;如果你的日期格式是Jan-1901这类完整年份,可将转换代码改为:
    years <- as.integer(sub(".*-", "", date_strings))
    
  • 替换X轴:用axis()函数覆盖默认整数刻度,at参数匹配原绘图的刻度位置,labels参数传入转换后的年份,las=2让标签垂直显示,防止年份文本重叠。

月度数据适配(可选)

如果你的数据是月度频率(每个点对应一个月份),可转换为完整日期对象后提取年月标签:

# 将Jan-1转换为1901-01-01格式的日期对象
date_objects <- as.Date(paste0("01-", date_strings, "-1900"), format = "%d-%b-%Y")
# 提取年月作为标签
year_month_labels <- format(date_objects, "%Y-%b")
# 替换axis函数的labels参数
axis(1, at = seq_along(date_objects), labels = year_month_labels, las = 2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 10:10:24