- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 ggplot2 创建了一个动画图,然后使用 gganimate。该图显示了随时间变化的点,我以红色突出显示了一个兴趣点,并以黄色突出显示了随着时间的推移与红色点保持一致的点。
我试图在右侧的情节之外,红色和黄色点是什么(如它们在数据框中的身份)并根据时间点而变化。当你看到一些黄点消失等时 - 但是我无法完成这项工作。我试过 geom_text(),``labs() 没有运气。
情节的代码是:
library(gifski)
library(gganimate)
library(ggplot2)
labels = 'word1'
highlight_red<- words[words$X %in% labels,]#dataframe with word of interest
labels2<-c("word2", "word3")
highlight_orange<-words[words$X %in% labels2,]#dataframe with word of interest
p <- ggplot(words, aes(x_coord, y=y_coord, col = time)) +
theme_void()+
labs(title ="{words$time[words$time == round(frame_time)][1]}") +
theme(plot.title = element_text(size = 50, face = "bold", colour = "grey", margin = margin(t = 10, b = -20)))+
geom_point(alpha = 1)+
geom_point(data=highlight_red,
aes(x_coord, y=y_coord),
color='red',
size=3)+
geom_point(data=highlight_orange,
aes(x_coord, y=y_coord),
color='orange',
size=3, alpha=0.8)+
guides(size=FALSE) +
theme(legend.title = element_blank()) +
coord_fixed(ratio = 1)
p<-p+
transition_time(time)+
shadow_wake(wake_length = 0, alpha = FALSE)+
enter_fade() +
exit_shrink()
animate(p, duration = 5, fps = 20, renderer = gifski_renderer())
附上gif。我希望最接近红点的感兴趣的单词(例如前 5 个)在列表的右侧循环,就像它们在散点图上所做的那样,以反射(reflect)红点周围实际发生的变化。我曾尝试添加代码,例如(到主 ggplot 代码)
# geom_text(aes(label = "{highlight_orange$X[highlight_orange$time == round(frame_time)][1]}"),
# hjust = -0.35,#adjust position
# size = 3,
# check_overlap = TRUE)
绝对没有运气 - 它也需要在一个整洁的列表中,当然不要重叠。任何帮助深表感谢。谢谢你。
X x_coord y_coord time
1 word1 27.065716 59.019010 1
2 word2 22.936882 61.470710 1
3 word3 25.227564 62.780384 1
4 word4 27.878267 61.130566 1
5 word5 22.929253 61.345573 1
6 word6 14.307319 -44.314228 1
8760 word1 6.607143 -56.996240 2
8844 word2 -64.222240 -9.363668 2
10370 word3 -63.630585 -8.037662 2
10501 word4 -13.532422 -50.246193 2
13788 word5 5.143321 -56.445950 3
14583 word6 -67.655820 -29.041885 3
22566 word1 -48.322063 -24.847290 4
26496 word3 3.340046 14.917225 5
27050 word6 2.397841 -53.621520 6
28818 word3 -19.618414 37.386040 6
30582 word5 -15.498601 -51.142025 6
31513 word4 -3.114899 -14.631951 6
32772 word1 -4.706020 -9.429874 6
最佳答案
不确定我是否理解正确,如果这就是您要执行的操作。从您的问题来看,您似乎想显示一个列表,其中包含 highlight_orange
中的单词。在情节旁边的列表中。如果单词从一帧变为下一帧,您会希望它们四处移动。
如果是这种情况,我有点找到了一种方法来做到这一点。但唯一困扰我的是我无法设置不同的 enter
和 exit
geom_text
的属性(property).我要 geom_text
使用 enter_fly
和 exit_fly
(并让 geom_point
继续使用 enter_fade
和 exit_shrink
)。
显然 it is possible to do this ,但我不知道如何做到这一点......
无论如何,我会将我的答案按原样放在这里,因为它可能对您有所帮助。
# get max y and y (for positioning list in plot)
max.y <- ceiling(max(words$y_coord))
max.x <- ceiling(max(words$x_coord))
# calculate x/y position of list of words
highlight_orange <- highlight_orange %>%
dplyr::group_by(time) %>%
# position in list
dplyr::mutate(rank = row_number()) %>%
# compute x, y position in plot (I had to do trial and error with the y offset so the words would not overlap)
dplyr::mutate(x_pos=max.x, y_pos=max.y - 4*(rank-1)) %>% dplyr::ungroup()
p <- ggplot(words, aes(x_coord, y=y_coord, col = time)) +
theme_void()+
labs(title ="{words$time[words$time == round(frame_time)][1]}") +
theme(plot.title = element_text(size = 50, face = "bold", colour = "grey", margin = margin(t = 10, b = -20)))+
geom_point(alpha = 1)+
geom_point(data=highlight_red,
aes(x=x_coord, y=y_coord),
color='red',
size=3)+
geom_point(data=highlight_orange,
aes(x=x_coord, y=y_coord),
color='orange',
size=3, alpha=0.8)+
geom_text(data=highlight_orange, aes(x=x_pos, y=y_pos, label=X, group=X), hjust=0, vjust=0.5, colour='black') +
guides(size=FALSE, col=FALSE) +
theme(legend.title = element_blank()) +
# set "clip=off" so you can draw the text outside of the plotting area
coord_fixed(ratio = 1, clip = "off")
# I think you can set different enter/exit for each layer. But I could not figure out how...
p + transition_time(time) + shadow_wake(wake_length = 0, alpha = FALSE) +
enter_fade() + exit_shrink()
关于r - 在 ggplot2 之外添加列表,该列表会随着时间的推移而变化 - gganimate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66209022/
有没有办法将使用 ffmmeg_renderer 或 av_renderer 制作的电影保存为单独的文件?我总是将主题作为数据嵌入到 html 文件中。 最佳答案 使用来自@Roman 的示例,我将使
我有以下数据框: # Seed RNG set.seed(33550336) # Create data frame df 将显示一个整数。如果frame_time是一个常规变量,那么使用bquot
几天来我一直在努力解决这个问题,但我不明白我错过了什么。 gganimate 似乎没有在帧之间添加任何过渡。 我正在使用 Tour de France dataset from the tidytue
是否可以在一个动画循环后停止? 动画应执行到去年 2021 年,然后停止显示所有条形图! 这是一个使用 gganimate 的条形动画示例: library(tidyverse) library(gg
我想将我的数据的另一列值插入gganimate动画标题中。 例如,这里的状态级别变量是x,我想添加到标题变量y: df 1 1 a 2 2 a 3 3 b
我有以下生成静态图表的 R 脚本 library(ggplot2) library(dplyr) library(tidyr) library(stringr) library(gta
是否可以在 gganimate 循环之间添加暂停?我知道我们可以使用 interval 设置帧之间的间隔,但是有没有办法在循环回第一帧之前在最后一帧暂停? 将最终帧的多个副本插入到数据中的最佳方法是吗
我正在尝试使用 gganimate 绘制一段时间内 NHL 前 3 名得分手的图。目前,我有一个柱形图,其中 x 轴显示球员姓名,y 轴显示每个球员的进球数。这是我所拥有的静态版本: library(
我有一个如下所示的数据框: head(newnolarank) lon lat week b 1 -90.06445 29.97121 1 9 2 -90.06704 29.9
遵循源代码 Here 。我正在尝试用我的数据复制它。我有一个时间序列数据,我在 y 轴上绘制事件和非事件数字。这是我的示例数据结构: df <- tibble::tribble( ~Date, ~
我已经解析了电子游戏《反恐精英》中手榴弹 throw 的一些数据。下面的示例数据显示我有关于手榴弹从哪里 throw 、手榴弹爆炸的位置以及何时 throw 手榴弹的位置。 df % # Add
我正在尝试使用 gganimate 绘制一段时间内 NHL 前 3 名得分手的图。目前,我有一个柱形图,其中 x 轴显示球员姓名,y 轴显示每个球员的进球数。这是我所拥有的静态版本: library(
我第一次尝试 gganimate 包,但在处理缺失值 (NA) 时遇到了问题。如果我的问题很微不足道,但我找不到任何解决方案,我深表歉意。 这是我正在尝试做的事情的可重现示例: # Load libr
我正在使用 gganimate。假设我有这个 MWE: library(ggplot2) library(gganimate) ggplot(airquality, aes(Day, Temp)) +
使用 gganimate 从 ggplot 制作动画时,我需要设置较低的速度以允许人们读取数据。 阅读文档(很难找到选项)似乎“nframes”是正确的设置。但我不能减慢动画或设置持续时间。两种方法中
以下两行代码,取自 script ,做我认为他们应该做的;也就是使用之前生成的ggplot文件——gganim——在Rstudio的查看器(第一行)中创建一个动画,并将最后一个动画保存到我mac上的g
我正在尝试显示随着时间的推移构建的直方图。它将从 1952 年的数据开始,然后每年更新直方图,并不断增长。 路径似乎是 gganimate,我认为使用 transition_reveal随着时间的推移
我在设置动画时无法设置绘图的宽度。 因此,如果我使用库 gapminder 制作静态图,代码如下: library(ggplot2) library(gganimate) theme_set(them
我想将绘图标签(标题、副标题)对齐到图像的左侧,而不是绘图区域的左侧,以获得 gganimate 动画。 这可以通过转换为 gtable 然后修改布局来使用静态图表。动画需要一种不同的方法,因为 gg
试图创建一个具有简单特征的动画,本质上是一个区域分布图形式的空间变量的时间序列。 问题是多边形在动画播放时遍布整个情节。 这是一个可重现的示例,部分摘自 https://www.blog.cultur
我是一名优秀的程序员,十分优秀!