gganimate 具有相同 x 值的多个点
gganimate with multiple points for same x value
我有一些数据,其中多个 y 坐标值对应一个 x 坐标值。它类似于此问题中包含的那个。它还有一个 state
变量,必须用于 gganimate
.
中的 transition_state()
函数
library(data.table)
df <- data.table(
x = seq(11),
type1 = c(2, 3, 2.5, 3, 2, 2, 3, 2.5, 3.5, 3, 2),
type2 = c(NA, 3, 3.5, 3, NA, NA, 3, 3.5, 4, 3, NA)
)
m.df <- melt.data.table(df, "x", variable.name = "grp")
m.df[x %in% seq(5), "state" := 1][x %in% seq(6, 11), "state" := 2]
m.df
#> x grp value state
#> 1: 1 type1 2.0 1
#> 2: 2 type1 3.0 1
#> 3: 3 type1 2.5 1
#> 4: 4 type1 3.0 1
#> 5: 5 type1 2.0 1
#> 6: 6 type1 2.0 2
#> 7: 7 type1 3.0 2
#> 8: 8 type1 2.5 2
#> 9: 9 type1 3.5 2
#> 10: 10 type1 3.0 2
#> 11: 11 type1 2.0 2
#> 12: 1 type2 NA 1
#> 13: 2 type2 3.0 1
#> 14: 3 type2 3.5 1
#> 15: 4 type2 3.0 1
#> 16: 5 type2 NA 1
#> 17: 6 type2 NA 2
#> 18: 7 type2 3.0 2
#> 19: 8 type2 3.5 2
#> 20: 9 type2 4.0 2
#> 21: 10 type2 3.0 2
#> 22: 11 type2 NA 2
#> x grp value state
数据是使用 gganimate 绘制的,如下所示。
library(ggplot2)
ggplot(m.df, aes(x, value, group = grp, color = grp)) +
geom_line(na.rm = T) +
geom_point(na.rm = T) +
theme_bw()
剧情可以找到HERE
我想使用 gganimate transition_state()
函数使用数据中的状态列,如下所示,但显示错误。
library(gganimate)
ggplot(m.df, aes(x, value, group = grp, color = grp)) +
geom_line(na.rm = T) +
geom_point(na.rm = T) +
transition_states(state)
#> Error in rep(seq_len(nrow(polygon)), splits + 1): invalid 'times' argument
我做错了什么?
提前致谢
使您的代码正常工作的一个选项是按 grp
和 state
分组,例如使用interaction
。否则 gganimate
无法按 state
拆分您的数据,因为每个组中都存在这两种状态。此外,您必须将 group
aes 放在 color
aes 之后。否则你 运行 会遇到同样的问题:
library(ggplot2)
library(gganimate)
ggplot(m.df, aes(x, value, color = grp, group = interaction(grp, state))) +
geom_line(na.rm = T) +
geom_point(na.rm = T) +
transition_states(state)
我有一些数据,其中多个 y 坐标值对应一个 x 坐标值。它类似于此问题中包含的那个。它还有一个 state
变量,必须用于 gganimate
.
transition_state()
函数
library(data.table)
df <- data.table(
x = seq(11),
type1 = c(2, 3, 2.5, 3, 2, 2, 3, 2.5, 3.5, 3, 2),
type2 = c(NA, 3, 3.5, 3, NA, NA, 3, 3.5, 4, 3, NA)
)
m.df <- melt.data.table(df, "x", variable.name = "grp")
m.df[x %in% seq(5), "state" := 1][x %in% seq(6, 11), "state" := 2]
m.df
#> x grp value state
#> 1: 1 type1 2.0 1
#> 2: 2 type1 3.0 1
#> 3: 3 type1 2.5 1
#> 4: 4 type1 3.0 1
#> 5: 5 type1 2.0 1
#> 6: 6 type1 2.0 2
#> 7: 7 type1 3.0 2
#> 8: 8 type1 2.5 2
#> 9: 9 type1 3.5 2
#> 10: 10 type1 3.0 2
#> 11: 11 type1 2.0 2
#> 12: 1 type2 NA 1
#> 13: 2 type2 3.0 1
#> 14: 3 type2 3.5 1
#> 15: 4 type2 3.0 1
#> 16: 5 type2 NA 1
#> 17: 6 type2 NA 2
#> 18: 7 type2 3.0 2
#> 19: 8 type2 3.5 2
#> 20: 9 type2 4.0 2
#> 21: 10 type2 3.0 2
#> 22: 11 type2 NA 2
#> x grp value state
数据是使用 gganimate 绘制的,如下所示。
library(ggplot2)
ggplot(m.df, aes(x, value, group = grp, color = grp)) +
geom_line(na.rm = T) +
geom_point(na.rm = T) +
theme_bw()
剧情可以找到HERE
我想使用 gganimate transition_state()
函数使用数据中的状态列,如下所示,但显示错误。
library(gganimate)
ggplot(m.df, aes(x, value, group = grp, color = grp)) +
geom_line(na.rm = T) +
geom_point(na.rm = T) +
transition_states(state)
#> Error in rep(seq_len(nrow(polygon)), splits + 1): invalid 'times' argument
我做错了什么?
提前致谢
使您的代码正常工作的一个选项是按 grp
和 state
分组,例如使用interaction
。否则 gganimate
无法按 state
拆分您的数据,因为每个组中都存在这两种状态。此外,您必须将 group
aes 放在 color
aes 之后。否则你 运行 会遇到同样的问题:
library(ggplot2)
library(gganimate)
ggplot(m.df, aes(x, value, color = grp, group = interaction(grp, state))) +
geom_line(na.rm = T) +
geom_point(na.rm = T) +
transition_states(state)