LoginSignup
32
28

More than 3 years have passed since last update.

JuliaのJupyterでプロット動画を素早く確認する

Last updated at Posted at 2020-01-11

2020/02/17 「折衷案」追記

さくさくと表示させます

Juliaは良い言語だが、数値計算の結果をPlots@gif@animateとかで動画作成すると時間がかかるのが難点
(数値計算が早い分、動画出力の時間が余計に気になってしまう)

今回、Jupyter-notebookで素早く「確認作業」をします。
こんな感じです
Plots_anime-Mozilla-Firefox-2020-01-11-11-14-08.gif

解説

今回は適当に動くx,y データを300個づつ用意してます。

using Plots
x,y=rand(300),rand(300)
for i in 2:length(x)     #ランダムウォーク"的"に適当に動いてもらいます
    x[i]=x[i-1]+x[i]-0.5
    y[i]=y[i-1]+y[i]-0.5
end

普通にgif動画を出力すると

@gif for i in 1:length(x)
    scatter([x[i]],[y[i]],legend=:none,lims=(-5,5),size=(250,250))
end

8.140788 seconds
tmp.gif

と、家の2013年製i5マシンでは約8秒待ちです。
(1回はプロット済み)

これを確認用に

for i in 1:length(x)
    IJulia.clear_output(true)
    scatter([x[i]],[y[i]],legend=:none,lims=(-5,5),size=(250,250))|>display
end

とすると最初のgif動画の様にすぐさま表示し始め、動きを確認できます。

内容は
IJulia.clear_output(true)Out欄を削除し、
scatter([x[i]],[y[i]],・・・)|>displayOut欄に静止画表示
繰り返すだけです。

@gif等によるpng出力&ffmpeg変換の時間がかからず、プロット画像のできたそばから表示されるので、非常に素早いですが、変換してないので、当然動画は残りません

IJuliaの関数を使うのでJupyter専用になりますし、fpsはマシン性能次第ですので調整が必要な場合もあると思います。

「折衷案」

折衷案ですが、使い勝手がいいです。

anim = @animate for i in 1:length(x)
    IJulia.clear_output(true)
    scatter([x[i]],[y[i]],legend=:none,lims=(-5,5),size=(250,250))|>display
end

gif(anim,fps=10)

pngファイルを作りつつ、上記の連続静止画表示をします。
若干ファイル生成時間が増えますが、gif化がすぐにできるので便利です。
最近はこっちやってます。

おまけ

バックエンドunicodeplots()

@gifは画像ファイルの形式にできないと扱えないのですが、今回のは表示&削除を繰り返すだけなので
Plots_anime-Mozilla-Firefox-2020-01-11-11-02-23.gif
のようなテキストも動画的に確認できます。
何か生かせるといいですね。

最後に

本当は@gifが楽なのでいろいろ試したのですが、png変換がボトルネックっぽく、ffmpegに直で渡せたらもう少し早くできるのかもしれませんが、分かりませんでした。何か知ってる方、教えて下さい。

以上、ありがとうございました。

32
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
28