8

自从 David Robinson 发布了他的 gganimate 包并认为我自己会玩一出之后,我一直在羡慕和钦佩出现在 twitter 上的各种 ggplot 动画。我在使用 geom_bar 时遇到了 gganimate 的问题。希望下面的例子能说明问题。

首先为可重现的示例生成一些数据:

df <- data.frame(x = c(1, 2, 1, 2),
                 y = c(1, 2, 3, 4),
                 z = c("A", "A", "B", "B"))

为了演示我正在尝试做的事情,我认为绘制一个普通的 ggplot 会很有用,由z. 我试图让 gganimate 生成一个在这两个图之间循环的 gif。

ggplot(df, aes(x = x, y = y)) +
   geom_bar(stat = "Identity") +
   facet_grid(~z)

facetted_barchart

但是当我使用 gganimate 时,B 的情节表现得很奇怪。在第二帧中,条形图从第一帧的条形图结束的值开始,而不是从原点开始。就好像它是一个堆叠的条形图。

p <- ggplot(df, aes(x = x, y = y, frame = z)) +
   geom_bar(stat = "Identity") 
gg_animate(p)

bar_animation

顺便说一句,当尝试相同的情节时,geom_point一切都按预期工作。

q <- ggplot(df, aes(x = x, y = y, frame = z)) +
    geom_point() 
gg_animate(q)

我试图发布一些图片,但显然我没有足够的声誉,所以我希望没有它们是有意义的。这是一个错误,还是我错过了什么?

提前致谢,

托马斯

4

1 回答 1

13

原因是没有刻面,条形是堆叠的。使用position = "identity"

p <- ggplot(df, aes(x = x, y = y, frame = z)) +
  geom_bar(stat = "Identity", position = "identity") 
gg_animate(p)

在此处输入图像描述

为了避免在这种情况下发生混淆,替换framefill(或colour,取决于您使用的geom`)会更有用:

p <- ggplot(df, aes(x = x, y = y, fill = z)) +
  geom_bar(stat = "Identity") 
p

在此处输入图像描述

当您替换为时,绘制的两个图fill完全frame对应于一次绘制一种颜色。

于 2016-03-01T19:52:45.447 回答