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

如何制作按月份逐天展示的动态气温变化图(基于airquality数据)

解决方案:基于airquality数据集制作按时间逐天展示的气温动态图

问题分析

原代码使用transition_reveal(Day)时,所有月份的同日数据(比如5月1日、6月1日)会同时出现,原因是Day仅表示当月天数,不是连续的时间变量,无法区分不同月份的同一天。

可行方案:基于真实日期的逐天展示

核心思路是将Month和Day转换为连续的日期变量,让动画按真实时间顺序(从1973年5月1日到9月30日)逐天累积展示气温变化。

步骤1:加载依赖包并处理数据集

library(ggplot2)
library(gganimate)

# 给airquality添加完整日期列,数据集默认是1973年的观测数据
airquality$Date <- as.Date(paste(1973, airquality$Month, airquality$Day, sep = "-"))

步骤2:绘制基础静态图

p <- ggplot(airquality, aes(x = Day, y = Temp, group = Month, color = factor(Month))) +
  geom_line() +
  geom_point() +
  scale_color_viridis_d(name = "月份") +
  labs(x = "当月日期", y = "气温") +
  theme(legend.position = "top")

步骤3:添加逐天动画效果

使用transition_reveal(Date)按真实日期顺序累积展示数据,确保每个时间点仅展示到当前日期为止的所有数据:

animate(p + transition_reveal(Date), 
        fps = 5,  # 每秒帧数,可根据需求调整
        duration = 10)  # 动画总时长,可按需调整

效果说明

  • 动画从5月1日开始,每天依次添加当日的气温点和对应线段,直到9月30日完成所有数据展示
  • 不同月份的气温曲线会按真实时间先后逐步绘制,不会出现同日数据同时显示的问题

对尝试代码的修正说明

你之前尝试的transition_states或transition_manual未成功的原因是:

  • MonthOrder仅按月份分组,无法实现逐天的精细展示
  • ID按行号排序虽能逐行显示,但geom_line需要累积展示的逻辑,transition_reveal更适配折线图的逐步绘制需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:20:19