如何使用transition_states()显示叠加图的过渡?

时间:2019-08-15 16:21:07

标签: r ggplot2 gganimate

如何使用transition_states()显示叠加图的过渡?

    I wish to highlight particular data points from the data using the package of `gganimate`. 

这是我尝试的一个非常简单的示例。我创建了第一个数据集和仅包含2个数据点的图。

#create df
df1= data.frame(x=c(1,2),y=c(2,3))

#plot
p1<- ggplot(df1,aes(x,y))+geom_point()

然后,我希望突出显示一个颜色不同的数据点(x = 2,y-3),因此我创建了第二个数据集并叠加在第一个图上以显示差异。

df2= data.frame(x=2,y=3)
p1+ geom_point(data=df2,color="red")

是否可以使用transition_states()来显示从df1到df2的转换?

p1+transition_states(geom_point(data=df2,color="red"))
Error in order(ind) : argument 1 is not a vector

任何建议深表感谢!

1 个答案:

答案 0 :(得分:1)

为此,您可以构建一个'long'data.frame,其中包含所有数据,最重要的是,该列指定时间或状态。因此,第一步是将df1df2合并或绑定到一个长数据帧df中。

library(dplyr)
df1= data.frame(x=c(1,2),y=c(2,3), color = "black", time = 1, stringsAsFactors = F)
df2= data.frame(x=2,y=3, color = "red", time = 2, stringsAsFactors = F)
df <- bind_rows(df1, df2)

> df
  x y color time
1 1 2 black    1
2 2 3 black    1
3 2 3   red    2

我也已经添加了颜色列。从这里我创建动画:

ggplot(df, aes(x = x, y = y, color = color)) +
        geom_point(size = 10, show.legend = F) +
        scale_color_manual(values = c("black", "red")) +
        transition_states(time)

由于这是一种“静态”动画,因此还可以通过添加一个附加步骤(df3)来更清楚地显示数据的过渡:

df1= data.frame(x=c(1,2),y=c(2,3), color = "black", time = 1, stringsAsFactors = F)
df2= data.frame(x=2,y=3, color = "black", time = 2, stringsAsFactors = F)
df3= data.frame(x=2,y=3, color = "red", time = 3, stringsAsFactors = F)
df <- bind_rows(df1, df2, df3)

ggplot(df, aes(x = x, y = y, color = color)) +
        geom_point(size = 10, show.legend = F) +
        scale_color_manual(values = c("black", "red")) +
        transition_states(time)

由于您需要叠加图,因此可以使用shadow_mark命令:

ggplot(df, aes(x = x, y = y, color = color)) +
        geom_point(size = 10, show.legend = F) +
        scale_color_manual(values = c("black", "red")) +
        transition_states(time) +
        shadow_mark()

这里有三种不同的动画(请注意,我在gif中添加了标题): enter image description here

Here是另外的information