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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:16:00