2016-10-06 13 views
3

私はgganimateに精通し始めていますが、私はgifをさらに拡張したいと思います。ggplot2プロットにレイヤーを追加するプロセスをアニメーション化する

例えば、gganimateの変数にframeを投げることができますが、まったく新しいレイヤー/ギムズ/変数を追加するプロセスをアニメーション化したいのですが?

は、ここでは、標準gganimate例です:

library(tidyverse) 
library(gganimate) 

p <- ggplot(mtcars, aes(x = hp, y = mpg, frame = cyl)) + 
    geom_point() 

gg_animate(p) 

しかし、私はGIFアニメーション化する場合:

# frame 1 
ggplot(mtcars, aes(x = hp, y = mpg)) + 
    geom_point() 

# frame 2 
ggplot(mtcars, aes(x = hp, y = mpg)) + 
    geom_point(aes(color = factor(cyl))) 

# frame 3 
ggplot(mtcars, aes(x = hp, y = mpg)) + 
    geom_point(aes(color = factor(cyl), size = wt)) 

# frame 4 
ggplot(mtcars, aes(x = hp, y = mpg)) + 
    geom_point(aes(color = factor(cyl), size = wt)) + 
    labs(title = "MTCARS") 

はどのようにこれが達成される可能性がありますか?

答えて

5

それは、意図的に、私は信じて(すぐにすべてのフレームのための伝説が含まれます正しい比率/マージンなどを維持するためにかかわらず、手動で、各レイヤにframe美学を追加することができます。

saveAnimate <- 
    ggplot(mtcars, aes(x = hp, y = mpg)) + 
    # frame 1 
    geom_point(aes(frame = 1)) + 
    # frame 2 
    geom_point(aes(color = factor(cyl) 
       , frame = 2) 
      ) + 
    # frame 3 
    geom_point(aes(color = factor(cyl), size = wt 
       , frame = 3)) + 
    # frame 4 
    geom_point(aes(color = factor(cyl), size = wt 
       , frame = 4)) + 
    # I don't think I can add this one 
    labs(title = "MTCARS") 

gg_animate(saveAnimate) 

enter image description here

あなた自身を追加したり、凡例、タイトルなどが物事をどのように動かすかを見たい場合は、下位レベルのパッケージに戻って自分でイメージを構築する必要があります。私はanimationパッケージを使用しています。このパッケージを使用すると、一連のプロットをループすることができます。 h制限はありません(これらは全く関連する必要はないので、プロット領域を動かすことができます)。私はImageMagickをコンピュータにインストールする必要があると考えています。

p <- ggplot(mtcars, aes(x = hp, y = mpg)) 

toSave <- list(
    p + geom_point() 
    , p + geom_point(aes(color = factor(cyl))) 
    , p + geom_point(aes(color = factor(cyl), size = wt)) 
    , p + geom_point(aes(color = factor(cyl), size = wt)) + 
    labs(title = "MTCARS") 
) 

library(animation) 

saveGIF(
    {lapply(toSave, print)} 
    , "animationTest.gif" 
) 

enter image description here

+0

かなり滑らかです。私は前にSOのアニメーション表示を見たことはないと思う。私はそれだけでpngファイルを表示すると思った。今はリットルビットを遅くする必要がありますが、これはおそらく別の問題です。 –

+0

'saveGIF'のヘルプは、' interval'を含む 'ani.options'を指しています。これは、各フレームが滞在する時間(秒単位)を設定します。だから、 'interval = 3'を追加するだけで1フレームあたり3秒になるでしょう。 –

+0

凡例を固定フォーマットで保持するコードが追加されているはずですが、ページが更新されるとその印象はなくなりました。ああ、決して、心...上のものはその特徴を持ち、下のものはそうではない。 –

0

animationパッケージには、データのフレームを指定するように強制するものではありません。このページの一番下の例を参照してくださいhere、ここでアニメーションは大きなsaveGIF()関数でラップされています。個々のフレームとすべての期間を指定できます。

この欠点は、素敵なgganimate関数とは異なり、基本的なフレーム単位のアニメーションがプロットの次元/凡例を保持しないことです。しかし、フレームごとに必要なものを正確に表示する方法をハックすることができれば、基本的なアニメーションパッケージがうまく機能します。

関連する問題