长格式数据的 gganimate 错误和 plot_usmap

gganimate error with long-format data and plot_usmap

我正在尝试使用 gganimate 制作地图动画,但 运行 出现以下错误:

Error in seq.default(range[1], range[2], length.out = nframes) : 
'from' must be a finite number

这似乎通常发生在用于 transition_time() 的变量不是数字或数据格式错误时,但我不知道我的情况会怎样;我的数据采用正确的长格式,transition_time() 的变量是数字且始终是有限的。

这是 plot_usmap() 的特定问题吗?我是否漏掉了一些明显的东西?

我的数据在 GitHub。代码如下:

library("usmap")
library("ggplot2")
library("gganimate")

load("helpdata.Rda")

check = plot_usmap(data = df_map, values = "frac_cov") +
  scale_fill_stepsn(breaks=c(-100, 0, 0.1, 0.2, 0.3, 0.4, 0.5,
                             0.6, 0.7, 0.8, 0.9, 1, 100),
                    colors=c("red", "gray100", "gray90", "gray80", "gray70", "gray60",
                             "gray50", "gray40", "gray30", "gray20", "gray10", "red"),
                    na.value="white") +
  labs(fill = "", title = "Fraction of excess deaths\nattributed to COVID-19") +
  theme(legend.position = "right", plot.title = element_text(hjust = 0.5)) +
  transition_time(month)

anim <- animate(check, nframes=9, fps=1)

非常感谢!

您的数据集有 50 个唯一的 fips 值。 usmap 包中的地图数据带有 51。当 plot_usmap 创建 ggplot 层时,它通过 fips 代码将您的数据集与地图数据合并,这将 NA 值添加到月份列之一,因为其中一个fips 代码不匹配。

transition_time 对此大惊小怪,而 transition_state 却没有。我对 gganimate 包不够熟悉,无法从理论上解释为什么会这样。)

在绘图之前将以下内容添加到您的数据集中。应该可以解决问题:

df_map <- rbind(df_map,
                data.frame(month = sort(unique(df_map$month)),
                           frac_cov = 0,
                           fips = 11)) # the missing fips value

运行 问题中显示的相同动画代码后的结果: