質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

2034閲覧

matplotlibで動画(mp4)を作るとき何をanimation.ArtistAnimationに投げたらいいかわからない

ruei

総合スコア284

Matplotlib

MatplotlibはPythonのおよび、NumPy用のグラフ描画ライブラリです。多くの場合、IPythonと連携して使われます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2018/09/05 13:02

編集2018/09/05 13:04

matplotlibを用いて、動画(mp4)を作成したいと思っているのですが、
何をanimation.ArtistAnimationに投げたらいいかわかりません。
以下のコードで出力される240枚の画像を動画にしたいと思っています。
コンパイルに通ることや画像が出力されることは確認しています。
参考を参考にしていたのですが、いまいち、何をanimation.ArtistAnimatioに投げたらいいのかわかりません。
詳しい方よろしくお願いします。
pythonのバージョンは3.6.5
matplotlibのバージョンは2.2.2
ffmpegのバージョンは4.4
です。

import h5py import numpy as np #matplotlib.use('Agg') import matplotlib.pyplot as plt import matplotlib.animation as animation <省略> for k in range(0, 240): for i in range(0, 302): for j in range(0, 302): E_x = a[i][j][k] E_y = b[i][k][k] v = np.linspace(0, 0.105, 400, endpoint = True) tick = np.linspace(0, 0.105, 6, endpoint = True) fig = plt.figure() ax = fig.add_subplot(111) im = ax.contourf(X0, Y0, ENE, v, cmap = 'afmhot') fig.colorbar(im, ticks = tick) #im = ax.contour(X0, Y0, EPS, alpha = 0.3) ax.set_aspect('equal') ax.set_title(str(k) + ".png") fig.savefig(str(k) + '.png') plt.close(fig)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

animation.ArtistAnimation クラスについて

python

1animation.ArtistAnimation(fig, artists, *args, **kwargs)
  • fig: Figure オブジェクト
  • artists: 各フレームを構成する Artist の一覧
  • interval: 各フレームの表示間隔 (ミリ秒)。デフォルトは 200 ms。
  • repeat_delay: リピートする場合、リピートする前の遅延を ms で指定する。デフォルトは None。
  • repeat: リピートするかどうか。デフォルトは True。

matplotlib でアニメーションを作成するポイント

  1. Figure、Axes を作成する。
  2. 各フレームで表示する Artist のリストを作成する。
[[フレーム1で表示する Artist], [フレーム2で表示する Artist]:

Axes.plot() などグラフ作成の関数は、それを構成する Artist を返すようになっているので、
それをリストに詰めていってください。

  1. ArtistAnimation() に渡す。
  2. ArtistAnimation.save() で保存する。

Ipython Notebook を利用している場合は、冒頭に以下を入れると、plt.show()で Notebook 上に表示できます。

%matplotlib nbagg

Artist とは

グラフを構成するオブジェクトです。
例えば、折れ線グラフは、Line2D という Artist で構成されています。
Axes.plot() などの関数は返り値として、そのグラフを構成する Artist を返すようになっています。

より詳しくは こちらこちら
などを参考にしてください。

サンプルコード

python

1import matplotlib.pyplot as plt 2import numpy as np 3from matplotlib.animation import ArtistAnimation 4from mpl_toolkits.mplot3d import Axes3D 5from scipy.stats import multivariate_normal 6 7# (x, y) の点の一覧を作成する。 8x = np.linspace(-5, 5, 1000) 9y = np.linspace(-5, 5, 1000) 10X, Y = np.meshgrid(x, y) 11XY = np.c_[np.ravel(X), np.ravel(Y)] 12 13############################################# 14 15fig, axes = plt.subplots(figsize=(4, 4)) 16frames = [] # 各フレームを構成する Artist 一覧 17 18for i in np.linspace(0, 4, 10): 19 # 2次元正規分布の値を生成する。 20 mean = np.array([i, i]) 21 sigma = np.eye(2) 22 Z = multivariate_normal.pdf(x=XY, mean=mean, cov=sigma) 23 Z = Z.reshape(X.shape) 24 25 # 等高線グラフを作成する。 26 im = axes.contourf(X, Y, Z, 10, cmap=plt.cm.winter) 27 28 # 等高線を構成する Artist 一覧を追加する。 29 print(im) # matplotlib.contour.QuadContourSet object 30 artists = im.collections # QuadContourSet の collections 属性が Artist の一覧 31 frames.append(artists) 32 33# アニメーションを作成する。 34anim = ArtistAnimation(fig, frames, interval=500) 35 36# gif 画像として保存する。 37anim.save('animation.gif', writer='imagemagick') 38# mp4 で保存する場合は以下。ffmpeg がインストールされている必要がある。 39# anim.save('anim.mp4', writer='ffmpeg', fps=4) 40 41# Figure を表示する。 42fig.show() 43

実行すると、2次元正規分布の中心が少しずつ右上に移動していくアニメーションgifが作成されます。

イメージ説明

投稿2018/09/09 17:32

tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ruei

2018/09/11 16:14

出来ました!詳しく教えていただき助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問