自定义日期格式数据集的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
相关产品推荐
相关产品推荐

