据我所知gganimate已经在1.0.3版本了,我们可以使用transition_*函数来绘制动态图。但是当我运行以下代码时,出现错误:

Error in `$<-.data.frame`(`*tmp*`, "group", value = "") :  
  replacement has 1 row, data has 0 

代码:

library(ggmap) 
library(gganimate) 
world <- map_data("world") 
world <- world[world$region!="Antarctica",] 
data <- data.frame(state = c("Alabama","Alaska","Alberta","Alberta","Arizona"), 
                   lon = c(-86.55,-149.52,-114.05,-113.25,-112.05), 
                   lat = c(33.30,61.13,51.05,53.34,33.30) 
                   ) 
ggplot()+ 
  geom_map(data = world, 
           map = world, 
           aes(long,lat,map_id = region), 
           color = '#333300', 
           fill = '#663300') + 
  geom_point(data = data, 
             aes(x = lon, y = lat), 
             size = 2.5) + 
  geom_jitter(width = 0.1) + 
  transition_states(states = state) 

请您参考如下方法:

您没有在顶级 ggplot() 行中定义数据,因此 transition_* 中的 state 不知从何而来。

我也不清楚为什么您的代码中有 geom_jitter 级别。与 transition_* 一样,它没有要继承的顶级数据/美学映射,因此如果 transition_* 没有先触发错误,它也会抛出错误。此外,即使我们添加映射,给定数据中的纬度/经度坐标范围,0.1 的抖动在视觉上也几乎没有影响。

您可以尝试以下方法:

# put data in top level ggplot() 
ggplot(data, 
       aes(x = lon, y = lat))+ 
  geom_map(data = world, 
           map = world, 
           aes(long,lat,map_id = region), 
           color = '#333300', fill = '#663300', 
           # lighter background for better visibility 
           alpha = 0.5) +  
  geom_point(size = 2.5) + 
  # limit coordinates to relevant range 
  coord_quickmap(x = c(-180, -50), y = c(25, 85)) + 
  transition_states(states = state) 


评论关闭
IT干货网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!