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"))

私がやろうとしていることを示すために、z. これら2つのプロット間を循環するgifをgganimateに生成させようとしています。

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

facetted_barchart

しかし、gganimate を使用すると、B のプロットが奇妙な動作をします。2 番目のフレームでは、棒は原点からではなく、最初のフレームの棒が終了する値から始まります。あたかも積み上げ棒グラフのように。

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

バーアニメーション

ちなみに、同じプロットを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)

ここに画像の説明を入力

このような状況での混乱を避けるために、 (または、使用している geom によっては )frameに置き換える方がはるかに便利です。fillcolour

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

ここに画像の説明を入力

で置き換えると、描画される 2 つのプロットは、一度に 1 つの色のみを描画することに正確に対応しfillます。frame

于 2016-03-01T19:52:45.447 に答える