gpt4 book ai didi

gganimate 的舍入帧时间和平滑过渡

转载 作者:行者123 更新时间:2023-12-02 03:48:05 25 4
gpt4 key购买 nike

我有以下数据框:

# Seed RNG
set.seed(33550336)

# Create data frame
df <- data.frame(x = runif(100),
y = runif(100),
t = runif(100, min = 0, max = 10))

我想将出现和消失的点(即 xy 坐标)绘制为 t 的函数。 gganimate 非常棒,所以我使用了它。

# Load libraries
library(gganimate)
library(ggplot2)

# Create animation
g <- ggplot(df, aes(x = x, y = y))
g <- g + geom_point(colour = "#FF3300", shape = 19, size = 5, alpha = 0.25)
g <- g + labs(title = 'Time: {frame_time}')
g <- g + transition_time(t)
g <- g + enter_fade() + exit_fade()
animate(g, fps = 1)

此代码产生以下结果:

enter image description here

有几件事我不喜欢。

  1. 过渡非常突然。我希望使用 enter_fadeexit_fade 是这些点会淡入 View ,然后退出。显然情况并非如此,但是我如何实现这个结果呢?
  2. 我想对 {frame_time} 进行四舍五入,以便当点以 t 的分数淡入和淡出时,实际时间 t > 将显示一个整数。如果frame_time是一个常规变量,那么使用bquoteround之类的东西就足够简单了,但情况似乎并非如此。如何舍入标题中的 frame_time

最佳答案

这是一种相对手动的方法,它依赖于事先进行更多准备并将其输入到 gganimate 中。我想看看是否有更简单的方法可以在 gganimate 中更自动地执行此操作。

首先,我为要显示的每个帧制作数据帧的副本。然后,我计算当前查看的时间 (time) 与我想要显示每个数据点的 t 之间的差异。我使用 cos 来处理缓入和缓出,以便使用 display 描述给定时间的每个点的外观。在 ggplot 调用中,我将 alpha 和大小映射到 display,并使用 transition_time(time) 在帧中移动。

# Create prep table
fade_time = 1
frame_count = 100
frames_per_time = 10
df2 <- map_df(seq_len(frame_count), ~df, .id = "time") %>%
mutate(time = as.numeric(time)/frames_per_time,
delta_norm = (t - time) / fade_time,
display = if_else(abs(delta_norm) > 1, 0, cos(pi / 2 * delta_norm)))


# Create animation
g <- ggplot(df2, aes(x = x, y = y, alpha = display, size = display))
g <- g + geom_point(colour = "#FF3300", shape = 19)
g <- g + scale_alpha(range = c(0, 1)) + scale_size_area(max_size = 5)
g <- g + labs(title = "{round(frame_time, 1)}")
g <- g + transition_time(time)
animate(g)

enter image description here

关于gganimate 的舍入帧时间和平滑过渡,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53119822/

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