R gganimate-won';组合几何点和几何点时不渲染
我正在尝试在gganimate中为在地图上移动的点设置动画。在以下示例中,仅设置点的动画有效,点和贴图的静态绘图有效,但组合它们失败,mapply中出现错误R gganimate-won';组合几何点和几何点时不渲染,r,ggplot2,sf,gganimate,R,Ggplot2,Sf,Gganimate,我正在尝试在gganimate中为在地图上移动的点设置动画。在以下示例中,仅设置点的动画有效,点和贴图的静态绘图有效,但组合它们失败,mapply中出现错误错误(FUN=f,…,SIMPLIFY=FALSE):零长度输入不能与非零长度输入混合 这是一份报告: 加载库 创建数据 在背景中使用静态贴图设置点动画(失败) p2trackid未定义,是什么在p2中抛出错误;时间已定义。trackid未定义,是什么在p2中引发错误;时间已定义。 将data=d和aes()从ggplot()移动到geom_
错误(FUN=f,…,SIMPLIFY=FALSE):零长度输入不能与非零长度输入混合
这是一份报告:
加载库
创建数据
在背景中使用静态贴图设置点动画(失败)
p2trackid未定义,是什么在p2中抛出错误;时间已定义。trackid未定义,是什么在p2中引发错误;时间已定义。
将data=d
和aes()
从ggplot()
移动到geom_point()
将transition\u components()
更改为transition\u time()
将shadow\u trail
更改为shadow\u wake
(添加颜色)
代码
p2
将data=d
和aes()
从ggplot()
移动到geom_point()
将transition\u components()
更改为transition\u time()
将shadow\u trail
更改为shadow\u wake
(添加颜色)
代码
p2 gganimate不在cran上,否则是一个伟大的MWE。您能用devtools::install代码添加注释吗?正如推测一样,转换组件的参数从何而来?似乎您需要一个带有时间序列中心点的sf对象。@RichardCareaga完全忘记了gganimate不在CRAN上-谢谢提醒!我认为transition_组件的参数类似于aes的参数,即不带引号的列名。在transition_组件中,它们分别是分组变量和timestep变量。但我不想让geom_sf动画化。我只想把它放在背景里。不确定如何指示它应该是静态层。gganimate不在cran上,否则是一个很棒的MWE。您能用devtools::install代码添加注释吗?正如推测一样,转换组件的参数从何而来?似乎您需要一个带有时间序列中心点的sf对象。@RichardCareaga完全忘记了gganimate不在CRAN上-谢谢提醒!我认为transition_组件的参数类似于aes的参数,即不带引号的列名。在transition_组件中,它们分别是分组变量和timestep变量。但我不想让geom_sf动画化。我只想把它放在背景里。我不知道如何表明它应该是一个静态层。我不知道你的意思trackid
在d
中定义。前100行为1,后100行为2。它在区域
中未定义,但时间也未定义。添加了一个答案,b/c这是我发现的唯一执行代码块的方法。运行示例时,时间会在名称空间中结束,因为它是全局定义的,而trackid不是;它是d、track1和track2对象的本地对象。在p2的初始ggplot()中确实调用了d,但对于geom_sf,则使用area作为数据。d是一个TIBLE,如果你想引用它的组件,你要么显式地这样做,比如在d$trackid中,要么通过%>%当你可以使用裸名称时。我认为这是不对的transition\u组件
采用不带引号的列名,就像ggplot
中的aes
一样。另外,如果是trackid
未定义的问题,那么第一个动画情节将不起作用,但这确实起作用:第一个动画中的pd起作用,因为它设置数据,+参数不会改变它,所以不需要引用“tracked”。“Time”已经是全局的。我不确定你的意思trackid
在d
中定义。前100行为1,后100行为2。它在区域
中未定义,但时间也未定义。添加了一个答案,b/c这是我发现的唯一执行代码块的方法。运行示例时,时间会在名称空间中结束,因为它是全局定义的,而trackid不是;它是d、track1和track2对象的本地对象。在p2的初始ggplot()中确实调用了d,但对于geom_sf,则使用area作为数据。d是一个TIBLE,如果你想引用它的组件,你要么显式地这样做,比如在d$trackid中,要么通过%>%当你可以使用裸名称时。我认为这是不对的transition\u组件
采用不带引号的列名,就像ggplot
中的aes
一样。另外,如果是trackid
未定义的问题,那么第一个动画情节将不起作用,但这确实起作用:第一个动画中的p d起作用,因为它设置了数据,+参数不会改变它,所以不需要引用“tracked”。“时间”已经是全局的。
# gganimate isn't on CRAN
devtools::install_github('thomasp85/gganimate')
library(tidyverse)
library(gganimate)
library(sf)
# for the spatial data
library(rnaturalearth)
# Points data
time <- seq(ISOdate(2015, 6, 1), ISOdate(2015, 8, 1), length.out = 100)
track1 <- tibble(lon = seq(-161, -155, length.out = 100),
lat = seq(19, 25, length.out = 100),
time = time,
trackid = 1)
track2 <- tibble(lon = seq(-155, -161, length.out = 100),
lat = seq(19, 25, length.out = 100),
time = time,
trackid = 2)
d <- rbind(track1, track2)
# Spatial data
earth <- st_as_sf(ne_download(scale = "medium",
category = "physical",
type = "coastline"))
deg_buff <- 1
lon_range <- range(d$lon) + c(-deg_buff, deg_buff)
lat_range <- range(d$lat) + c(-deg_buff, deg_buff)
bbox <- st_polygon(list(cbind(lon_range[c(1,1,2,2,1)],
lat_range[c(1,2,2,1,1)])))
bbox <- st_sfc(bbox)
st_crs(bbox) <- st_crs(earth)
area <- st_intersection(earth, bbox)
p <- ggplot(d, aes(lon, lat)) +
geom_point() +
labs(subtitle = 'Date: {format(frame_time, "%b %e")}') +
transition_components(trackid, time) +
shadow_trail(distance = 0.01, size = 0.3)
animate(p, 100, 20)
ggplot(d, aes(lon, lat)) +
geom_sf(data = area, inherit.aes = FALSE) +
geom_point()
p2 <- ggplot(d, aes(lon, lat)) +
geom_sf(data = area, inherit.aes = FALSE) +
geom_point() +
labs(subtitle = 'Date: {format(frame_time, "%b %e")}') +
transition_components(trackid, time) +
shadow_trail(distance = 0.01, size = 0.3)
animate(p2, 100, 20)
p2 <- ggplot() +
geom_sf(data = area, color = "red") +
geom_point(data = d, aes(lon, lat), inherit.aes = FALSE) +
labs(subtitle = 'Date: {format(frame_time, "%b %e")}') +
transition_time(time) +
shadow_wake(0.3)
animate(p2, 100)