ggplot2筛选特定年份绘气温折线图报错及自动选年问题
解决你的ggplot报错与自动生成间隔年份问题
嘿,我来帮你搞定这两个问题~
一、先解决「Error in Year %in% c("1901", "1910") : object 'Year' not found」报错
这个报错主要有两个原因,我帮你一一修正:
- subset函数的写法与类型匹配问题
你写的subset(data=aggdata, Year %in% c("1901" , "1910"))存在两个小问题:一是如果你的Year列是数值型(从你给出的数据集看年份是数字格式),给年份加引号会导致类型不匹配,无法筛选到数据;二是subset更直观的写法是把数据集放在第一个位置,条件放在第二个位置,避免环境评估问题。
修正后的subset写法:
# 用数值匹配数值型的Year列 subset(aggdata, Year %in% c(1901, 1910))
- 更推荐用dplyr的filter函数(清晰不易错)
如果你安装了dplyr包,用filter替代subset会更直观,也不容易出环境类的错误:
library(dplyr) aggdata %>% filter(Year %in% c(1901, 1910))
把修正后的逻辑整合到你的绘图代码里:
library(ggplot2) library(plotly) library(dplyr) # 修正后的完整绘图代码 plot_rain <- aggdata %>% filter(Year %in% c(1901, 1910)) %>% # 筛选目标年份 ggplot(aes(x = Year, y = tem, color = factor(Year))) + geom_line() + theme_minimal() + xlab("Year") + ylab("Temperature") + ggtitle("Temp according to Year") ggplotly(plot_rain)
二、自动生成间隔年份序列
当然可以自动生成!用R内置的seq()函数就能轻松实现,比如你想要从1901开始,每10年取一个年份,直到数据集的最大年份:
# 自动生成1901, 1910, 1920,...直到数据集最大年份的序列 target_years <- seq(from = 1901, to = max(aggdata$Year), by = 10)
如果你想指定结束年份,把max(aggdata$Year)改成具体数字(比如2000)就行。
然后把这个变量用到筛选逻辑里,就能自动筛选间隔年份了:
plot_rain <- aggdata %>% filter(Year %in% target_years) %>% ggplot(aes(x = Year, y = tem, color = factor(Year))) + geom_line() + theme_minimal() + xlab("Year") + ylab("Temperature") + ggtitle("Temp according to Year") ggplotly(plot_rain)
内容的提问来源于stack exchange,提问作者0Knowledge
相关产品推荐
相关产品推荐

