如何使用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
任何建议深表感谢!
答案 0 :(得分:1)
为此,您可以构建一个'long'data.frame
,其中包含所有数据,最重要的是,该列指定时间或状态。因此,第一步是将df1
和df2
合并或绑定到一个长数据帧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()
Here是另外的information。