7
5

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 5 years have passed since last update.

pythonのmatplotlibで図をたくさん表示してその中にグラフを沢山表示していっぱいプロットしてリアルタイムに表示する。

Posted at

#経緯
pythonでプログラムを書いていたら、

  • リアルタイムに更新したい
  • グラフを複数表示したい
  • 1つの図にたくさんのグラフを出したい

ということがあった。
やり方がわかったのでまとめる

やりたいこと_trimmed.mov.gif

#実行環境
python =>3.6
matplotlib =>2.0.2

#とりあえずコード
とりあえず普通に sin cos tan (三角関数) をプロットするときの例

main.py
# -*- coding: utf-8 -*-
import matplotlib.pyplot as plt

import numpy as np


def main():
    x = np.linspace(-2 * np.pi, 2 * np.pi, 10000)
    y1 = np.sin(x)
    y2 = np.cos(x)
    y3 = np.tan(x)
    y4 = np.arctan(x)

    # 図1を定義
    fig1 = plt.figure()

    # タイトルをつける
    fig1.suptitle("trigonometric function", fontsize=16)

    # 図の中にサブプロットを追加する
    fig1_a = fig1.add_subplot(3, 1, 1)
    fig1_b = fig1.add_subplot(3, 1, 2)
    fig1_c = fig1.add_subplot(3, 1, 3)

    # 図1(a)にプロットする
    fig1_a_1, = fig1_a.plot(x, y1)

    # 2個以上プロットするときはこう
    # fig1_a_2, = fig1_a.plot(x, y2)

    # 図1(a)のタイトルを記入
    fig1_a.set_title("(a) y = sin(x)")

    # x軸の範囲を決める
    fig1_a.set_ylim(y1.min(), y1.max())
    fig1_a.set_xlim(x.min(), x.max())

    fig1_b_1, = fig1_b.plot(x, y2)
    fig1_b.set_title("(b) y = cos(x)")

    fig1_c_1, = fig1_c.plot(x, y3)
    fig1_c.set_ylim(-5, 5)
    fig1_c.set_title("(c) y = tan(x)")

    # 図1のタイトルと図がかぶるのでこれでOK
    fig1.tight_layout()
    fig1.subplots_adjust(top=0.85)

    # 図2を追加。図1と同じ感じでレイアウト可能
    fig2 = plt.figure()

    fig2_a = fig2.add_subplot(3, 2, 1)
    fig2_b = fig2.add_subplot(3, 2, 2)
    fig2_c = fig2.add_subplot(3, 2, 3)
    fig2_d = fig2.add_subplot(3, 2, 4)
    fig2_e = fig2.add_subplot(3, 2, 5)
    fig2_f = fig2.add_subplot(3, 2, 6)

    # 更新した値を表示する
    while True:
        plt.pause(0.1)

        x += 0.1
        y1 = np.sin(x)
        y2 = np.cos(x)
        y3 = np.tan(x)

        fig1_a_1.set_data(x, y1)
        fig1_a.set_ylim(y1.min(), y1.max())
        fig1_a.set_xlim(x.min(), x.max())

        fig1_b_1.set_data(x, y2)
        fig1_b.set_ylim(y2.min(), y2.max())
        fig1_b.set_xlim(x.min(), x.max())

        fig1_c_1.set_data(x, y3)
        fig1_c.set_xlim(x.min(), x.max())


if __name__ == '__main__':
    main()

7
5
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
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?