使用 gganimate() 沿日期设置动画点和回归线
Animate points and regression line along date with gganimate()
我正在尝试对点和黄土回归线进行动画处理,因此它们 appear/are 在一年中同时显示,但返回时出现错误,如下面的 reprex 所述。
这将是理想的动画:https://user-images.githubusercontent.com/1775316/49728400-f0ba1b80-fc72-11e8-86c5-71ed84b247db.gif
不幸的是,我发现这个的线程没有附带的代码。
在这里查看我的 reprex 问题:
#Animate points and regression loess line along with dates at the same time
library(MASS) #for phones reprex dataset
phones <- data.frame(phones) #Prepare reprex data
library(ggplot2) #for plotting
library(gganimate) #for animation
#Animation
ggplot(phones, aes(x = year, y = calls)) +
geom_point() + geom_smooth(method = "loess", colour = "orange",
se = FALSE) +
transition_time(year) + shadow_mark() + ease_aes("linear")
这个returns错误:
Error in `$<-.data.frame`(`*tmp*`, "group", value = "") :
replacement has 1 row, data has 0
有些人建议我在 geom_smooth()
中插入 aes(group = year)
,但是 returns 同样的错误。
提前感谢您的帮助!
首先尝试计算每个数据点处黄土线的值,然后绘制图表。为了使线条更平滑,您可以预测具有更多 "year" 值的数据帧上的值。您需要确保拥有 transformr
库。感谢@paqmo 建议使用 transition_reveal 和组提示的 OP!
library(transformr)
smooth_vals = predict(loess(calls~year,phones))
phones$smooth_vals <- smooth_vals
#Animation
anim <- ggplot(phones, aes(x = year, y = calls)) +
geom_point(aes(group = seq_along(year))) +
geom_line(aes(y = smooth_vals), colour = "orange") +
transition_reveal(year) +
#shadow_mark() +
ease_aes("linear")
animate(anim, fps = 10, duration = 2)
如果你想改变黄土线的形状,只需在黄土函数中添加一个span
参数:
smooth_vals = predict(loess(calls~year,phones, span = 1))
phones$smooth_vals <- smooth_vals
这是它的样子 - 注意点更紧密:
这个站点是 gganimate
的重要资源,它帮助我想出了这个解决方案:
https://www.datanovia.com/en/blog/gganimate-how-to-create-plots-with-beautiful-animation-in-r/
我正在尝试对点和黄土回归线进行动画处理,因此它们 appear/are 在一年中同时显示,但返回时出现错误,如下面的 reprex 所述。
这将是理想的动画:https://user-images.githubusercontent.com/1775316/49728400-f0ba1b80-fc72-11e8-86c5-71ed84b247db.gif 不幸的是,我发现这个的线程没有附带的代码。
在这里查看我的 reprex 问题:
#Animate points and regression loess line along with dates at the same time
library(MASS) #for phones reprex dataset
phones <- data.frame(phones) #Prepare reprex data
library(ggplot2) #for plotting
library(gganimate) #for animation
#Animation
ggplot(phones, aes(x = year, y = calls)) +
geom_point() + geom_smooth(method = "loess", colour = "orange",
se = FALSE) +
transition_time(year) + shadow_mark() + ease_aes("linear")
这个returns错误:
Error in `$<-.data.frame`(`*tmp*`, "group", value = "") :
replacement has 1 row, data has 0
有些人建议我在 geom_smooth()
中插入 aes(group = year)
,但是 returns 同样的错误。
提前感谢您的帮助!
首先尝试计算每个数据点处黄土线的值,然后绘制图表。为了使线条更平滑,您可以预测具有更多 "year" 值的数据帧上的值。您需要确保拥有 transformr
库。感谢@paqmo 建议使用 transition_reveal 和组提示的 OP!
library(transformr)
smooth_vals = predict(loess(calls~year,phones))
phones$smooth_vals <- smooth_vals
#Animation
anim <- ggplot(phones, aes(x = year, y = calls)) +
geom_point(aes(group = seq_along(year))) +
geom_line(aes(y = smooth_vals), colour = "orange") +
transition_reveal(year) +
#shadow_mark() +
ease_aes("linear")
animate(anim, fps = 10, duration = 2)
如果你想改变黄土线的形状,只需在黄土函数中添加一个span
参数:
smooth_vals = predict(loess(calls~year,phones, span = 1))
phones$smooth_vals <- smooth_vals
这是它的样子 - 注意点更紧密:
这个站点是 gganimate
的重要资源,它帮助我想出了这个解决方案:
https://www.datanovia.com/en/blog/gganimate-how-to-create-plots-with-beautiful-animation-in-r/