我正在设置两条曲线的动画,其中一条曲线的斜率发生变化,我想在动画中显示每个状态下不断变化的交点。我知道交点在哪里,但不知道如何将它们包含在每个州的图中。
我尝试为每个状态的交叉点添加一个单独的transition_manual,但它只显示了那个,而不是第二个transition。
library(tidyverse)
library(gganimate)
tbl <- tibble(x = seq(-8, 8, by = .01),
A_1 = 4*x,
B_1 = x^2,
A_2 = 3*x,
B_2 = x^2,
A_3 = 2*x,
B_3 = x^2,
A_4 = x,
B_4 = x^2,
A_5 = 0*x,
B_5 = x^2) %>%
gather(group, density, A_1:B_5) %>%
separate(group, c("group", "type"), sep = "_") %>%
mutate(type = as.numeric(type)) %>%
mutate(Title = case_when(
type == 1 ~ "A = 0, B = 4",
type == 2 ~ "A = 0, B = 3",
type == 3 ~ "A = 0, B = 2",
type == 4 ~ "A = 0, B = 1",
TRUE ~ "A = B = 0"
))
ggplot(tbl) + geom_line(mapping = aes(x = x, y = density, colour = group)) +
transition_states(Title, transition_length = .5, state_length = 2, wrap = TRUE) +
labs(title = '{closest_state}') + ylab("f(x)")
这基本上是我想要的方式,除了不显示交点。
2条答案
按热度按时间2o7dmzc51#
这里有一个方法使用手工计算的交叉点。在这种情况下,它依赖于在计算的值之间存在精确的交集,但是它可以被修改以找到最接近的匹配。
umuewwlo2#
这里的想法是,你需要添加一个列,它有每个帧的交集(这里即。
Title
)。创建于2019-06-20由reprex package(v0.3.0)