如何按年份制作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
相关产品推荐
相关产品推荐

