技术求助:如何按年份和月份拆分绘制日期与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
相关产品推荐
相关产品推荐

