Я начал учиться использовать пакет gridSVG
для создания анимированных графиков SVG. В качестве теста я хочу оживить набор точек, перемещаясь от стартовых позиций до финишных позиций. Пример проиллюстрирован на основе first vignette.Как анимировать точки с помощью gridSVG в векторном виде?
Во-первых, некоторые данные:
n_points <- 20
start <- data.frame(
x = runif(n_points),
y = runif(n_points)
)
end <- data.frame(
x = runif(n_points),
y = runif(n_points)
)
Основная идея, как представляется, «нарисовать новую страницу, добавить содержимое для первого кадра, анимации, а затем сохранить в SVG». Моя первая попытка рисует все точки в одном и том же месте. Я не знаю, как сообщить grid.animate
, что каждый пункт нужно перемещать индивидуально.
grid.newpage()
with(start,
grid.points(x, y, default.units = "npc", name = "points")
)
grid.animate(
"points",
x = c(start$x, end$x),
y = c(start$y, end$y)
)
gridToSVG("point_test1.svg")
я могу обойти это, рисуя каждую точку в своем Grob, используя lapply
. Это работает, но кажется неуклюжим – там должен быть векторный способ сделать это.
grid.newpage()
lapply(seq_len(n_points), function(i)
{
gname = paste("points", i, sep = ".")
with(start,
grid.points(x[i], y[i], default.units = "npc", name = gname)
)
grid.animate(
gname,
x = c(start$x[i], end$x[i]),
y = c(start$y[i], end$y[i])
)
})
gridToSVG("point_test2.svg")
Я также попытался с помощью animUnit
, но я не могу понять, как задать параметр id
.
grid.newpage()
with(start,
grid.points(x, y, default.units = "npc", name = "points")
)
x_points <- animUnit(
unit(c(start$x, end$x), "npc"),
timeid = rep(1:2, each = n_points),
id = rep(1:2, n_points)
)
y_points <- animUnit(
unit(c(start$y, end$y), "npc"),
timeid = rep(1:2, each = n_points),
id = rep(1:2, n_points)
)
grid.animate( #throws an error: Expecting only one value per time point
"points",
x = x_points,
y = y_points
)
gridToSVG("point_test3.svg")
Могу ли я анимировать несколько точек внутри одного гроба или иначе одушевить точки без петли?
Ах да, я знал, что это должно быть просто. Благодарю. –