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

使用ggplot2绘制2001-2010年月度气象数据:曲线不显示及分面需求

解决方案:修复曲线显示问题+实现年份分面+添加mean_rh曲线

可复现模拟数据

先给出和需求匹配的模拟数据,方便你对应自己的数据集:

set.seed(123)
# 生成2001-2010年12个月的月度数据
df <- expand.grid(year = 2001:2010, month = 1:12)
df$precip <- rnorm(120, 50, 20)  # 降水量
df$temp <- rnorm(120, 15, 8)     # 气温
df$rh <- rnorm(120, 65, 10)      # 相对湿度
df$mean_rh <- 65                 # 年度平均相对湿度(若为逐年均值,替换为对应列即可)

曲线未显示的常见原因及修复

  • 数据格式不匹配:ggplot2绘制多条曲线时,需要长格式数据(宽格式会导致图层无法正确映射),用tidyr::pivot_longer()转换气温和湿度列
  • 双Y轴映射错误:降水与气温/湿度数值范围差异大,若用双Y轴需做线性缩放,否则曲线会被压缩到图表底部
  • 分面语法错误:确保year是字符/因子类型,分面用facet_wrap(~year)而非错误的分组逻辑

完整实现代码

以下代码实现了按年份分面,同时显示降水柱状图、气温/湿度曲线、mean_rh水平虚线,适配双Y轴:

library(ggplot2)
library(tidyr)

# 将气温、湿度转换为长格式
df_long <- df %>%
  pivot_longer(cols = c(temp, rh), names_to = "indicator", values_to = "value")

# 绘图
ggplot(df, aes(x = month)) +
  # 绘制降水量柱状图
  geom_col(aes(y = precip), fill = "#4682B4", alpha = 0.7) +
  # 绘制气温、湿度曲线(缩放后适配左侧Y轴,后续通过双Y轴转换)
  geom_line(data = df_long, aes(y = value * 0.7, color = indicator), linewidth = 1.1) +
  # 添加年度平均相对湿度水平线(同样适配缩放比例)
  geom_hline(aes(yintercept = mean_rh * 0.7), color = "#DC143C", linetype = "dashed", linewidth = 1) +
  # 双Y轴配置:左侧为降水量,右侧为气温/湿度
  scale_y_continuous(
    name = "月度降水量 (mm)",
    sec.axis = sec_axis(~./0.7, name = "气温 (°C) / 相对湿度 (%)")
  ) +
  # 按年份分面,每行显示2个年份
  facet_wrap(~year, ncol = 2) +
  # 自定义颜色
  scale_color_manual(values = c("temp" = "#FFA500", "rh" = "#228B22")) +
  # 标签与样式调整
  labs(x = "月份", color = "指标") +
  theme_minimal() +
  theme(
    axis.title.y.right = element_text(color = "#228B22"),
    legend.position = "top",
    strip.text = element_text(size = 10, face = "bold")
  )

关键细节说明

  • 双Y轴缩放比例:0.7是根据模拟数据的数值范围调整的,你可以根据自己数据的最大值/最小值修改,确保曲线在图表中显示清晰
  • mean_rh适配:如果你的mean_rh是逐年的平均值,直接替换geom_hline中的mean_rh为对应列名即可
  • 月份可读性优化:可以将数字月份转为英文缩写:df$month <- factor(df$month, levels = 1:12, labels = month.abb)

内容的提问来源于stack exchange,提问作者Ahsk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 10:32:11