gpt4 book ai didi

r - 如何以矢量化方式使用 gridSVG 为点设置动画?

转载 作者:行者123 更新时间:2023-12-04 14:41:03 26 4
gpt4 key购买 nike

我开始学习如何使用 gridSVG 包来创建动画 SVG 绘图。作为测试,我想为一组点设置动画,从开始位置移动到结束位置。该示例大致基于包的 first vignette 中的示例。 .

首先,一些数据:

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")

我可以通过使用 lapply 在自己的 grob 中绘制每个点来解决这个问题。这行得通,但感觉很笨拙——应该有一种矢量化的方式来做到这一点。

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")

我可以在单个 grob 中为多个点设置动画,或者在没有循环的情况下为点设置动画吗?

最佳答案

这对我使用 animUnit 很有效:

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:20, 2)
)
y_points <- animUnit(
unit(c(start$y, end$y), "npc"),
#timeid = rep(1:2, each = n_points),
id = rep(1:20, 2)
)
grid.animate( #throws an error: Expecting only one value per time point
"points",
x = x_points,
y = y_points
)

您为两个点指定了 id,而不是 20 个。我对小插图的理解是,要为每个 grob 使用单个 x 值的多个 grob 设置动画,您只需要指定 id。

关于r - 如何以矢量化方式使用 gridSVG 为点设置动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8593474/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com