与geom_bar有关的问题?

时间:2016-03-01 19:33:36

标签: r ggplot2 gganimate

我一直羡慕和钦佩自从大卫罗宾逊发布他的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)

bars_animation

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

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

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

提前致谢,

托马斯

1 个答案:

答案 0 :(得分:13)

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

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

enter image description here

为了避免在这种情况下出现混淆,将frame替换为fill(或colour,取决于您使用的geom)会更有用:)< / p>

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

enter image description here

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