如何在R中绘制含月均温与月均降水量的气候图?
解决方案
1. 先处理数据:计算月均温与月均降水量
首先按月份分组,计算2018-2019年的月均气温和月均降水量,用dplyr包实现:
library(dplyr) library(ggplot2) # 按月份分组计算均值,同时确保月份按自然顺序排列 df_summary <- df %>% group_by(Month) %>% summarise( avg_temp = mean(Temperature, na.rm = TRUE), # 忽略缺失值计算月均温 avg_precip = mean(Precipitation, na.rm = TRUE) # 忽略缺失值计算月均降水量 ) %>% mutate(Month = factor(Month, levels = month.name)) # 强制月份按1-12月顺序排列
2. 修正绘图代码,绘制标准气候图
你之前的代码报错是因为直接把两个独立ggplot()对象用+拼接,这不符合ggplot2语法。标准气候图一般用柱状图展示降水量(左轴)、折线图展示气温(右轴),代码如下:
ggplot(df_summary, aes(x = Month)) + # 绘制降水量柱状图 geom_col(aes(y = avg_precip), fill = "steelblue", width = 0.7) + # 绘制气温折线与散点,缩放数值匹配降水量轴范围(倍数可根据你的数据调整) geom_line(aes(y = avg_temp * 10), color = "darkred", size = 1.2) + geom_point(aes(y = avg_temp * 10), color = "darkred", size = 2) + # 设置双轴,还原气温数值 scale_y_continuous( name = "月均降水量(mm)", sec.axis = sec_axis(~ . / 10, name = "月均气温(℃)") ) + # 锁定x轴月份顺序 scale_x_discrete(limits = month.name) + # 添加标题与主题优化 labs(title = "2018-2019年月均气候数据") + theme( text = element_text(size = 15), axis.text.x = element_text(angle = 90, hjust = 1), plot.title = element_text(hjust = 0.5, size = 18, face = "bold") )
关键问题说明
- 报错原因:不能用
+直接拼接两个独立的ggplot()对象,ggplot2的语法是基于一个基础绘图对象,逐步叠加图层(geom_*、scale_*等)。 - 双轴适配:气温与降水量数值范围差异大,需要用缩放倍数让折线合理显示,右轴再反向缩放还原真实气温值,可根据你的数据集调整倍数。
- 月份排序:通过
factor(Month, levels = month.name)避免x轴月份乱序,保证按1-12月自然顺序展示。
内容的提问来源于stack exchange,提问作者user18343293
相关产品推荐
相关产品推荐

