使用ggplot绘制散点图时如何对同一变量不同年份子集索引绘图
错误原因
ggplot()的aes()参数要求映射的变量长度和传入的数据集行数完全匹配,你直接在aes()内对tmax取年份索引,得到的是长度为12的向量,和原数据集行数不匹配,因此运行报错。另外原代码最后一行多了一个多余的右括号,也会触发语法错误。
修复方案
方案1(推荐):先整理数据为宽表再绘图
这种方法符合tidyverse的绘图逻辑,后续加标签、调整样式更方便:
library(tidyverse) # 提取两年数据,整理为「一行对应一个月份,两列存对应年份tmax」的宽表 plot_data <- HeathrowData %>% filter(Year %in% c(2018, 2019)) %>% select(Year, Month, tmax) %>% pivot_wider(names_from = Year, values_from = tmax, names_prefix = "tmax_") # 绘制散点图 ggplot(plot_data, aes(x = tmax_2018, y = tmax_2019)) + geom_point(size = 2) + labs(x = "2018", y = "2019")
方案2:直接提取向量绘图
如果不需要保留中间数据,也可以直接提取两年的tmax向量传入绘图函数:
# 分别提取两年的tmax数据 tmax_2018 <- HeathrowData$tmax[HeathrowData$Year == 2018] tmax_2019 <- HeathrowData$tmax[HeathrowData$Year == 2019] # 绘图时不绑定全局数据集,直接在aes中传入提取好的向量 ggplot() + geom_point(aes(x = tmax_2018, y = tmax_2019), size = 2) + labs(x = "2018", y = "2019")
效果示例

内容的提问来源于stack exchange,提问作者AEP
相关产品推荐
相关产品推荐

