使用 gganimate 在 R 中创建流动的 Sankey 图
Issue Creating a Flowing Sankey Diagram in R Using gganimate
我正在使用以下指南尝试创建流动桑基图:https://www.hvitfeldt.me/blog/recreate-sankey-flow-chart/#r-packages。我的理解是这种方法(即 gganimate(p))使用了旧的且现在不受支持的 gganimate 版本。我正在尝试调整代码以使用新的 gganimate。我正在使用下面提供的代码。
我希望得到类似于博客上的结果:
即移动缓慢且有个别点。我用我的代码得到的是快速移动的 "points" 每个点实际上由一系列五个点表示:
任何帮助使用新的 gganimate 复制博客产品将不胜感激。
代码:
library(tidyverse)
library(gganimate)
sigmoid <- function(x_from, x_to, y_from, y_to, scale = 5, n = 100) {
x <- seq(-scale, scale, length = n)
y <- exp(x) / (exp(x) + 1)
tibble(x = (x + scale) / (scale * 2) * (x_to - x_from) + x_from,
y = y * (y_to - y_from) + y_from)
}
n_points <- 400
data <- tibble(from = rep(4, n_points),
to = sample(1:4, n_points, TRUE),
color = sample(c("A", "B"), n_points, TRUE))
p <- map_df(seq_len(nrow(data)),
~ sigmoid(0, 1, as.numeric(data[.x, 1]), as.numeric(data[.x,
2])) %>%
mutate(time = row_number() + .x,
y = y + runif(1, -0.25, 0.25))) %>%
ggplot(aes(x, y, frame = time)) +
geom_point()+transition_time(time)
p
看起来您在 time
中有 499 个值,超过了渲染的默认帧数 (100)。当您使用 transition_time(time)
时,它包括所有数据,即使是帧 "in between" 渲染的数据。这就是为什么您会看到一组 5 个点。
您可以:
1) 替换为 transition_manual(time)
因此它只使用 100 帧数据,丢弃中间的数据,或者
2) 保留 transition_time(time)
但使用 animate(p, nframes = 499)
进行渲染,以便保留所有帧。
我正在使用以下指南尝试创建流动桑基图:https://www.hvitfeldt.me/blog/recreate-sankey-flow-chart/#r-packages。我的理解是这种方法(即 gganimate(p))使用了旧的且现在不受支持的 gganimate 版本。我正在尝试调整代码以使用新的 gganimate。我正在使用下面提供的代码。
我希望得到类似于博客上的结果:
即移动缓慢且有个别点。我用我的代码得到的是快速移动的 "points" 每个点实际上由一系列五个点表示:
任何帮助使用新的 gganimate 复制博客产品将不胜感激。
代码:
library(tidyverse)
library(gganimate)
sigmoid <- function(x_from, x_to, y_from, y_to, scale = 5, n = 100) {
x <- seq(-scale, scale, length = n)
y <- exp(x) / (exp(x) + 1)
tibble(x = (x + scale) / (scale * 2) * (x_to - x_from) + x_from,
y = y * (y_to - y_from) + y_from)
}
n_points <- 400
data <- tibble(from = rep(4, n_points),
to = sample(1:4, n_points, TRUE),
color = sample(c("A", "B"), n_points, TRUE))
p <- map_df(seq_len(nrow(data)),
~ sigmoid(0, 1, as.numeric(data[.x, 1]), as.numeric(data[.x,
2])) %>%
mutate(time = row_number() + .x,
y = y + runif(1, -0.25, 0.25))) %>%
ggplot(aes(x, y, frame = time)) +
geom_point()+transition_time(time)
p
看起来您在 time
中有 499 个值,超过了渲染的默认帧数 (100)。当您使用 transition_time(time)
时,它包括所有数据,即使是帧 "in between" 渲染的数据。这就是为什么您会看到一组 5 个点。
您可以:
1) 替换为 transition_manual(time)
因此它只使用 100 帧数据,丢弃中间的数据,或者
2) 保留 transition_time(time)
但使用 animate(p, nframes = 499)
进行渲染,以便保留所有帧。