r - 如何让 x 轴跨度与 gganimate 动画一起移动?
问题描述
使用 R,我正在尝试使用 gganimate 制作一个基于 x 轴从左到右显示的折线图。我已经设法做到了,但我还想做的是使 scale_x_continuous(limits = c(i-5,i+5)),即在被显示的点周围有一个窗口,并且窗口将在揭示下一点的同时继续前进。
我已经尝试了很多方法来实现这一点,包括在使用和不使用 aes() 的 scale_x_continuous 中实现某种循环。似乎没有任何效果。我对 ggplot2 非常陌生,尤其是 gganimate,但我在网上找不到任何帮助。我觉得答案可能很简单,我只是错过了它。
有点像这样,但使用 gganimate:
以下是一些可重现的代码,大致向您展示我到目前为止所做的工作。
library(ggplot2)
library(gganimate)
library(gifski)
library(png)
Step <- c(1:50,1:50)
Name <- c(rep("A",50), rep("B",50))
Value <- c(runif(50,0,10), runif(50,10,20))
Final <- data.frame(Step, Name, Value)
a <- ggplot(Final, aes(x = Step, y = Value, group = Name, color = factor(Name))) +
geom_line(size=1) +
geom_point(size = 2) +
transition_reveal(Step) +
coord_cartesian(clip = 'off') +
theme_minimal() +
theme(plot.margin = margin(5.5, 40, 5.5, 5.5)) +
theme(legend.position = "none")
options(gganimate.dev_args = list(width = 7, height = 6, units = 'in', res=100))
animate(a, nframes = 100)
解决方案
不要使用 a transition
,使用 a view
。例如:
ggplot(Final, aes(x = Step, y = Value, color = factor(Name))) +
geom_line(size = 1) +
geom_point() +
view_zoom_manual(
0, 1, pause_first = FALSE, ease = 'linear', wrap = FALSE,
xmin = 1:40, xmax = 11:50, ymin = min(Final$Value), ymax = max(Final$Value)
) +
scale_x_continuous(breaks = seq(0, 50, 2))
推荐阅读
- python - Jupyter 以编程方式执行热键
- javascript - 触发更新功能时数据被复制 - Firebase
- azure - 使用 Python 的 Azure 服务总线
- google-cloud-platform - GCP 上带有“resource.sourceMachineImage”的新 VM 错误消息
- excel - 如何遍历一系列 10 个电子邮件地址并将它们添加到 VBA 中的电子邮件?
- ruby-on-rails - Rails 使用 micropost 脚手架时不呈现错误页面
- python-3.x - 将列表中的数据添加到已有数据的 csv 列
- angular - Angular 将数据从一个组件传递到另一个小部件组件
- c - 对 char* 数组 c99 使用拆分声明是否兼容?
- swiftui - 自己实现沿x轴旋转