2017-03-22 17 views
1

私はアニメーションプロットを作成しました。 gifgganimateとする。問題は、出力に凡例とキャプションが重複していて、何が原因なのかわからないということです。gganimate重複する凡例とキャプションを作成する

凡例は下部に、キャプションはプロットの左下に配置する必要があります。私がここで間違っていることに関するアイデアは?

再現例:

library(gapminder) 
library(ggplot2) 
library(gganimate) 
library(viridis) 

t <- ggplot(gapminder, aes(gdpPercap, lifeExp, size = pop, color = continent, frame = year)) + 
     geom_point() + 
     scale_color_viridis(name="Continent", discrete=TRUE) + 
     scale_x_log10() + 
     theme_void() + 
     theme(legend.position = "bottom", legend.box = "vertical", legend.title.align = 0) + 
     labs(title = "Year: ") + 
     labs(caption = " Caption test") + 
     theme(plot.title = element_text(hjust = 0.5, vjust = 0.05)) + 
     theme(plot.caption = element_text(hjust = 0, color="gray40", size=10)) 



gganimate(t, "output_test.gif") 

enter image description here

UPDATE [24-03-2017]:デビッド・ロビンソン、この奇妙な行動がそのバグによって引き起こされていることTwitterに私に確認gganimateの著者すぐに修正する必要があります。

ところで、@ hrbrmstrの解決策は良い仕事のように見えます。 gganimate_saveといくつかの問題があります

library(devtools) 
    install_github("dgrtwo/gganimate", ref = "26ec501") 
+1

読者に左のファイルをクリーンアップ

は運動ですまた、あなたの再現性の例では、 ''ライブラリ(ビリディス)が必要です。 – ds440

+0

これはgifのエクスポートプロセスの奇抜です。mp4にはうまく機能します – ds440

答えて

3

ここでの方法ですgganimateの外で行うこと。 :-)

library(gapminder) 
library(viridis) 
library(magick) 
library(tidyverse) 

td <- tempdir() 

years <- sort(unique(gapminder$year)) 

pb <- progress_estimated(length(years)) 

map_chr(years, ~{ 

    pb$tick()$print() 

    filter(gapminder, year == .x) %>% 
    ggplot(aes(gdpPercap, lifeExp, size = pop, color = continent)) + 
    geom_point() + 
    scale_color_viridis(name="Continent", discrete=TRUE) + 
    scale_x_log10() + 
    labs(title = sprintf("Year: %s", .x)) + 
    labs(caption = " Caption test") + 
    guides(colour = guide_legend(order = 2), shape = guide_legend(order = 1)) + 
    theme_void() + 
    theme(legend.position = "bottom", legend.box = "vertical", legend.title.align = 0) + 
    theme(plot.title = element_text(hjust = 0.5, vjust = 0.05)) + 
    theme(plot.caption = element_text(hjust = 0, color="gray40", size=10)) -> gg 

    fil <- file.path(td, sprintf("%04d.png", as.integer(.x))) 

    ggsave(fil, width=5, height=3, gg) 

    fil 

}) %>% 
    map(image_read) %>% 
    image_join() %>% 
    image_animate(fps=2, loop=1) %>% 
    image_write("animated.gif") 

enter image description here

+0

良い選択肢。ありがとう! –

+0

この出力には小さな問題があります。凡例はすべての画像で同じではありません.gganimateは凡例の一貫性を保ちますが、手作業のスケールではおそらく解決できる可能性があります。 – ds440

+0

あなたはそのIMOのために 'gganimate'に頼るべきではありません。必要なものを指定する必要があります。それは個人的なものです。 – hrbrmstr

2

:別の方法としては、次のようにインストールすることができますgganimateの古いバージョンを使用することです。ドキュメントでは、Detailsの下に「

」と表示されます。

GIFに保存する場合、冗長な背景(スケール、静的レイヤーなど)を利用するカスタムメソッドを使用します。

両方の軸セットを示すgifに加えて、最初の画像は水平軸を除いて空白です。

代わりにあなたが

gganimate(t, "output_test.mp4") 

を呼び出す場合次いで、得られた映画予想通りです。

あなたはその後、bashで、gif形式に変換するためにMP4にImageMagickのを呼び出す(またはRからのシステムコールのために適応させる)ことができます。

> convert output_test.mp4 output_test.gif 

Rから:

system('convert output_test.mp4 output_test.gif') 
+0

ありがとうございました。それは速い修正です。私はあなたに答えて投票しましたが、 '.gif'ファイルを保存するための問題は解決しません。 –

+0

これはgifを作成します。最初に一時的なmp4ファイルを作成します。 ImageMagickは、とにかくgganimateの前提条件です。 – ds440

関連する問題