使用geom_map搭配transition_time制作纽约新冠动画时出现insert_points错误
错误原因排查
- 核心错误来源是依赖包拼写错误:你加载的
transformer不是gganimate所需的空间动画依赖包,正确的包名是transformr。缺少这个包会导致gganimate在处理多边形过渡动画时,无法正常插入过渡帧的坐标点,触发类型不匹配的NULL报错。 - 次要原因是数据匹配不全:新冠数据集和纽约州郡县地图数据的匹配存在部分缺失值,部分日期的部分郡县没有对应病例数据,动画渲染时会出现空值坐标。
- 映射规则不兼容动画渲染:静态绘图时
expand_limits可以补充坐标范围,但动画渲染需要保障每个时间帧的所有郡县都有完整的数值映射。
修复方案
按以下步骤修改代码即可正常生成动画:
- 替换错误的依赖包加载语句,安装并加载
transformr - 补全病例数据集的缺失日期与郡县记录,避免空值
- 调整色阶参数避免数值波动导致的渲染异常
修改后可正常运行的完整代码如下:
library(ggplot2) library(gganimate) # install.packages("transformr") 未安装可先运行这行 library(transformr) library(tidyverse) # 读取纽约州郡县地图数据 county_map = map_data("county", region = "New York") county_map$region = county_map$subregion # 读取并处理新冠数据 covidCounties = read.csv("https://raw.githubusercontent.com/nytimes/covid-19-data/master/us-counties.csv", header = T) covidCounties = covidCounties %>% mutate(date = as.Date(date)) %>% filter(state == "New York") %>% mutate(county = tolower(county)) %>% arrange(date) %>% group_by(county) %>% mutate(newCases = diff(c(0, cases)), newDeaths = diff(c(0, deaths))) %>% ungroup() %>% select(date, state, county, cases, newCases, deaths) %>% # 补全所有日期和郡县的组合,缺失的新增病例设为0 complete(date, county, fill = list(newCases = 0, cases = 0, deaths = 0)) # 绘制地图 covidCountyMap = covidCounties %>% ggplot(aes( map_id = county, fill = newCases )) + geom_map( map = county_map, color = "black" ) + expand_limits(x = county_map$long, y = county_map$lat) + scale_fill_gradientn(colors = c("green", "yellow", "red"), breaks = c(0, 100, 500), limits = c(0,500), na.value = "green") + labs( title = "New cases over time in New York State", subtitle = "{frame_time}" ) # 生成动画 covidCountyMap + transition_time(date)
内容的提问来源于stack exchange,提问作者Kyle DePace
相关产品推荐
相关产品推荐

