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

如何按年份制作ggplot地图动画?含数据集及现有静态地图代码

实现世界地图上民主支持度的年份动画展示

首先先修正你数据集里的小问题:原代码里Country列的国家名称没加引号,会导致R识别错误,先把数据集改对:

output2 <- data.frame(
  Country = c("Turkey", "Italy", "Spain", "Turkey", "Italy", "Spain"),
  Year = c(1990, 1990, 1990, 1991, 1991, 1991), 
  v2x_regime = c(0, 1, 1, 1, 0, 0), 
  SupDem = c(0.9554, 0.8685, 0.7849, 0.9382, 0.2839, 0.39383)
)

注意:你当前的数据集只有1990和1991两年的数据,如果要做1990到2020的完整动画,需要补充对应年份的所有国家数据。

接下来实现地图动画,需要用到gganimate包生成动态效果,步骤如下:

1. 加载所需包

library(rnaturalearth)
library(rnaturalearthdata)
library(ggplot2)
library(gganimate)
library(dplyr)

2. 合并地图与全量年份数据

不需要单独筛选某一年,直接关联所有年份的数据:

world <- ne_countries(scale = "medium", returnclass = "sf")
plotdata <- dplyr::left_join(world, output2, by = c("admin" = "Country"))

3. 构建基础静态地图

保留你原有的配色逻辑,同时适配动态需求:

base_plot <- ggplot(data = plotdata) +
  geom_sf(aes(fill = SupDem)) +
  scale_fill_viridis_c(option = "plasma", na.value = "gray80") + # 无数据国家设为浅灰色
  labs(title = "民主支持度 - {frame_time}", fill = "支持度") + # 标题动态显示年份
  theme_minimal()

4. 添加动画过渡效果

按年份生成帧,设置平滑过渡:

animated_map <- base_plot +
  transition_time(Year) + # 按Year列生成动画帧
  ease_aes('linear') # 线性平滑过渡,可替换为'quadratic'等其他模式

5. 播放或保存动画

  • 直接在R中播放动画:
animate(animated_map, width = 800, height = 500, fps = 5)
  • 保存为GIF文件:
anim_save("democratic_support_animation.gif", animated_map, width = 800, height = 500, fps = 5)

关键细节说明

  • {frame_time}会在动画播放时自动替换为当前帧对应的年份,实现标题动态更新
  • na.value = "gray80"避免无数据国家出现空白区域,让地图视觉更完整
  • fps参数控制每秒播放帧数,数值越低动画速度越慢,反之则越快

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 01:05:16