2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

matplotlibリアルタイムチャート更新とアニメーションGIF作成 ※ ArtistAnimation不使用

Last updated at Posted at 2023-10-11

内容

download.gif

  1. matplotlib チャートをリアルタイム更新する方法
  2. matplotlib チャートをアニメーション表示し GIFファイルに保存する方法

PIL(Python Imaging Library)を使います。matplotlib.ArtistAnimation は使いません。 Colab で動作確認しました。

matplotlib チャートをリアルタイム更新

IPython.display を使います。早すぎると表示にコマ落ちが発生します。リピート再生はできません。

import time
import numpy as np
import matplotlib.pyplot as plt
from IPython.display import display  # 試した環境では省略しても動作しました

x = np.linspace(0, 2 * np.pi, 24)

fig = plt.figure(figsize=(2, 1.5))
display_handle = display(fig, display_id=True)
for i in range(12):
    y = np.sin(x + 0.5 * i)
    plt.clf()  # Axes の場合は ax.cla()
    plt.plot(x, y, '-')
    display_handle.update(fig)
    time.sleep(0.5)

plt.close()

matplotlib チャートをアニメーション表示し GIFファイルに保存

matplotlibチャートをコマ画像としてメモリ上に蓄積し最後に PIL でGIF画像に変換します。そのGIF画像を IPython.display で表示します。

import io
import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from IPython.display import display  # 試した環境では省略しても動作しました
from IPython.display import Image as DisplayImage

def fig2im(fig):
    """PyPlotのFIgureをPIL画像に変換"""
    with io.BytesIO() as fp:
        fig.savefig(fp, bbox_inches='tight', format='png')
        im = Image.open(fp)
        im.load()
    return im


def draw_animation(imgs):
    """PIL画像リスト imgs をアニメーションGIFで表示"""
    with io.BytesIO() as fp:
        # 先頭のPIL画像に後続するPIL画像を追加しGIF画像として保存
        imgs[0].save(fp, format='gif', append_images=imgs[1:], save_all=True, loop=0, duration=120)
        # ファイルの先頭へ移動
        fp.seek(0)
        # GIF画像表示
        display(DisplayImage(data=fp.read(), format='gif'))
    return

# アニメーションのコマ画像を作成
imgs = []
x = np.linspace(0, 2 * np.pi, 24)
fig = plt.figure(figsize=(2, 1.5))
for i in range(12):
    y = np.sin(x + 0.5 * i)
    plt.clf()  # Axes の場合は ax.cla()
    plt.plot(x, y, '-')
    imgs.append(fig2im(fig))

plt.close()

# アニメーション表示
draw_animation(imgs)

表示されたアニメーション上で[右クリック]-[名前を付けて画像を保存] でGIFファイルとして保存できます。

qiita-2310.png

2
3
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
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?