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

R中使用gganimate绘制cartogram动画时出现旧API错误如何解决

问题原因

你遇到的报错是因为当前安装的是新版gganimate,而你用的还是v0.1.1版本的旧API语法:旧版通过aes()中的frame参数指定帧维度,用gganimate()函数直接传入ggplot对象导出动画,这些用法都已经被废弃。另外你的数据准备部分存在逻辑错误,就算修正API也无法得到正确的变形过渡效果。

修正步骤

1. 修正数据源准备逻辑

你当前代码中cartogram_df和cartogram_data_df都是基于原始地图对象cartogram_data生成的,没有用到你已经计算好的cartogram变形结果cartogram_plot,两个数据完全一致,自然不会有过渡效果,替换为以下代码:

# 原始等值面地图数据(未变形)
cartogram_data_df <- broom::tidy(cartogram_data) %>%
  dplyr::left_join(cartogram_data@data, by=c("id"="ISO3"))
# 变形后 cartogram 地图数据(注意这里传入的是你计算好的变形结果)
cartogram_df <- broom::tidy(cartogram_plot) %>% 
  dplyr::left_join(cartogram_data@data, by=c("id"="ISO3"))

这部分改完之后,你之前用tweenr生成过渡帧的代码不用修改,可以正常使用。

2. 适配新版gganimate API调整绘图代码

删掉aes()里的frame=.frame参数,新增transition_manual(.frame)指定按提前生成好的.frame列切换帧,gganimate会自动处理每帧的筛选逻辑:

africa_plt <- ggplot() + 
  geom_polygon(data = dt  %>% arrange(order) , aes(fill = POP2005/1000000, x = long, y = lat, group = group) , size=0, alpha=0.9) +
  theme_void() +
  scale_fill_viridis(
    name="Population (M)", breaks=c(1,50,100, 140), 
    guide = guide_legend( 
      keyheight = unit(3, units = "mm"), keywidth=unit(12, units = "mm"), 
      label.position = "bottom", title.position = 'top', nrow=1)
  ) +
  labs( title = "Africa", subtitle="Population per country in 2005" ) +
  ylim(-35,35) +
  theme(
    text = element_text(color = "#22211d"), 
    plot.background = element_rect(fill = "#f5f5f4", color = NA), 
    panel.background = element_rect(fill = "#f5f5f4", color = NA), 
    legend.background = element_rect(fill = "#f5f5f4", color = NA),
    plot.title = element_text(size= 22, hjust=0.5, color = "#4e4d47", margin = margin(b = -0.1, t = 0.4, l = 2, unit = "cm")),
    plot.subtitle = element_text(size= 13, hjust=0.5, color = "#4e4d47", margin = margin(b = -0.1, t = 0.4, l = 2, unit = "cm")),
    legend.position = c(0.2, 0.26)
  ) +
  coord_map() +
  # 新增:指定按.frame列逐帧切换
  transition_manual(.frame)

3. 导出动画

删掉原来的gganimate()调用,用新版anim_save()函数直接导出gif即可:

# duration参数控制动画总时长,单位为秒,可按需调整
anim_save("Animated_Africa.gif", africa_plt, duration = 5)

如果导出时提示缺少gifski依赖,先运行install.packages("gifski")安装渲染器后再执行导出即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 04:36:06