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

如何在同一张图中完整展示不同时间区间的降雨量与计数数据

问题根源

你遇到的核心问题是:ggplot 默认会自动将 x 轴范围设置为所有图层数据日期的交集(2018年5月-2019年3月),导致无计数数据的2018年1-4月被挤出了视图范围,并非柱状图没绘制,只是没显示在当前坐标轴内。

两种解决方案

方案1:手动强制设置x轴完整范围

不需要合并数据,直接在绘图时指定x轴覆盖你需要的全时段,让早于2018年5月的降雨量数据显示出来:

library(ggplot2)
library(lubridate)

ggplot() +
  # 绘制降雨量柱状图
  geom_col(data = rain_df, aes(x = d, y = mean_tp_rf), fill = "#4682B4", alpha = 0.7) +
  # 绘制计数数据(这里假设用折线,你可以根据需求换成geom_point/geom_col)
  geom_line(data = count_df, aes(x = date, y = mean), color = "#CD5C5C", size = 1) +
  # 强制x轴范围覆盖2018-01到2019-04
  scale_x_date(
    limits = c(ymd("2018-01-01"), ymd("2019-04-30")),
    date_labels = "%Y-%m",  # 刻度显示格式:年-月
    date_breaks = "1 month" # 每月一个刻度
  ) +
  # 优化x轴标签显示,避免重叠
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(x = "日期", y = "降雨量", title = "降雨量与计数数据趋势")

方案2:合并数据统一日期列

把两个数据集按日期合并,缺失的计数数据填充为NA,这样ggplot能识别全时段日期,自然会显示所有数据:

library(ggplot2)
library(dplyr)
library(lubridate)

# 合并两个数据集,统一日期列
combined_df <- full_join(
  # 给降雨量数据重命名日期列,和计数数据对齐
  rain_df %>% rename(date = d) %>% select(date, mean_tp_rf),
  count_df,
  by = "date"
)

ggplot(combined_df, aes(x = date)) +
  geom_col(aes(y = mean_tp_rf), fill = "#4682B4", alpha = 0.7) +
  # 计数数据为NA的月份会自动跳过,不影响绘制
  geom_line(aes(y = mean), color = "#CD5C5C", size = 1) +
  scale_x_date(date_labels = "%Y-%m", date_breaks = "1 month") +
  theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
  labs(x = "日期", y = "降雨量", title = "降雨量与计数数据趋势")
额外提示

如果两类数据量级差异大(比如降雨量是几十,计数是几千),可以添加双坐标轴让数据更清晰,只需在scale_y_continuous里设置次要坐标轴:

scale_y_continuous(
  name = "降雨量",
  # 根据实际数据比例调整转换系数,比如计数是降雨量的100倍就用~./100
  sec.axis = sec_axis(~ ., name = "计数")
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:33:33