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

技术求助:如何按年份和月份拆分绘制日期与nonacc散点图?

问题:按年份/月份拆分绘制日期与非意外死亡数的散点图失败

首先先明确你的数据情况:你有2000年1月1日到2007年12月31日的首尔非意外死亡数(nonacc)及对应日期数据,样本如下:

head(data1$date)
# [1] "2000-01-01" "2000-01-02" "2000-01-03" "2000-01-04" "2000-01-05" "2000-01-06"
tail(data1$date)
# [1] "2007-12-26" "2007-12-27" "2007-12-28" "2007-12-29" "2007-12-30" "2007-12-31"
head(seoul$nonacc)
# [1] 139 144 130 149 143 136

你尝试了两段代码分别按月份、年份绘制散点图,但结果完全相同——这是因为你只调整了X轴的刻度显示,根本没对数据按年份/月份进行拆分筛选,两段代码用的都是完整的时间序列数据,所以图里的点完全一致,只是坐标轴标签不同而已。

下面给你几种可行的解决方案,根据你的需求选择:


方案1:按年份拆分,每年绘制一张独立散点图

通过循环遍历每个年份,筛选对应年份的数据后单独绘图:

# 先给数据添加年份列
seoul$year <- format(seoul$date, "%Y")
# 获取所有唯一的年份
unique_years <- unique(seoul$year)

# 循环绘制每年的散点图
for(y in unique_years){
  # 筛选当前年份的数据
  year_subset <- seoul[seoul$year == y, ]
  # 绘制散点图
  plot(year_subset$date, year_subset$nonacc, 
       main = paste("Seoul Nonaccidental Mortality -", y),
       xlab = "Date", ylab = "Nonaccidental Deaths",
       xaxt = "n", pch = 16, col = "#2E8B57")
  # 设置X轴为每月刻度,标签简化为年月格式
  x_ticks <- seq(min(year_subset$date), max(year_subset$date), by = "month")
  axis(side = 1, at = x_ticks, labels = format(x_ticks, "%Y-%m"), las = 1, cex.axis = 0.8)
}

方案2:按月份分组,在同一张图中用颜色区分

如果想在一张图里展示所有数据,同时用颜色区分不同月份的点:

# 添加月份列(数字格式)
seoul$month_num <- as.integer(format(seoul$date, "%m"))
# 绘制散点图,按月份设置颜色
plot(seoul$date, seoul$nonacc, 
     xlab = "Date", ylab = "Nonaccidental Deaths",
     col = seoul$month_num, pch = 16, xaxt = "n")
# 添加月份图例
legend("topright", legend = month.abb, col = 1:12, pch = 16, 
       title = "Month", cex = 0.8, bty = "n")
# 设置X轴为每年刻度
x_ticks <- seq(as.Date("2000-01-01"), as.Date("2007-12-31"), by = "year")
axis(side = 1, at = x_ticks, labels = format(x_ticks, "%Y"), las = 1)

方案3:按月份拆分,每月绘制一张独立散点图

和按年份拆分逻辑类似,只是筛选维度换成月份:

# 添加月份列(数字格式)
seoul$month_num <- as.integer(format(seoul$date, "%m"))
# 获取所有唯一月份
unique_months <- unique(seoul$month_num)

# 循环绘制每月的散点图
for(m in unique_months){
  # 筛选当前月份的数据
  month_subset <- seoul[seoul$month_num == m, ]
  # 绘制散点图
  plot(month_subset$date, month_subset$nonacc, 
       main = paste("Nonaccidental Deaths -", month.abb[m]),
       xlab = "Date", ylab = "Nonaccidental Deaths",
       xaxt = "n", pch = 16, col = "#FF6347")
  # 设置X轴为每年刻度
  x_ticks <- seq(min(month_subset$date), max(month_subset$date), by = "year")
  axis(side = 1, at = x_ticks, labels = format(x_ticks, "%Y"), las = 1)
}

核心要点就是:要实现按年份/月份拆分绘图,必须先对原始数据按年份/月份进行筛选或分组,再基于分组后的数据进行绘图——而不是只修改坐标轴的刻度显示哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:01:57