• 締切済み

matplotlibのプロットに配列を使用する方法

下記のサイト等を参考にして、PythonのmatplotlibのFuncAnimationにて、 グラフプロットのアニメーションを作ろうとしています。 https://sabopy.com/py/matplotlib-animation-62/ https://www.yutaka-note.com/entry/matplotlib_func_anim 測定データ(n個)毎、および測定時間(m個)毎に、プロットするべきデータがx軸, y軸でそれぞれ存在し、 それらプロットの数値は各々、【plot_data_x[n][m]】, 【plot_data_y[n][m]】という配列に予め格納されているとします。 その上で、 for counter in range(n): for counter in range(m): plot_list[n][m], = ax.plot([], []) for counter in range(n): for counter in range(m): plot_list[n][m].set_data((plot_data_x[n][m], plot_data_y[n][m])) というような形にすると、【set_data】メソッドが正常に機能しないのか、予約後表記にもならず(VSCode環境)エラーで弾かれます。 (あるいは【plot_list[n][m]】が想定通りに初期化されていない?) for文を使わず【plot1_1】,【plot1_2】…のように単一の変数を列挙する形式であれば動作したのですが、 どうしても配列になると動いてくれません。 これはそもそも【ax.plot】や【.set_data】が配列に対応していないのでしょうか。 それともコードのどこかしらに間違いがあるのでしょうか。 お手数をおかけして申し訳ありませんが、 どなたか詳しい方おられましたら配列で動かす手段を教えていただけますと助かります。 よろしくお願いします。

みんなの回答

回答No.1

「ax.plot」や「.set_data」は配列に対応しています。上記のエラーは配列の指定方法が間違っていることが原因です。 以下のように修正することで、配列を使用したプロットが可能です。 plot_list = [] for i in range(n): plot_list.append([]) for j in range(m): plot_list[i].append(ax.plot([], [])[0]) for i in range(n): for j in range(m): plot_list[i][j].set_data((plot_data_x[i][j], plot_data_y[i][j])) 「ax.plot」の戻り値はリストであり、「.set_data」は「Line2D」オブジェクトに適用するため、 「ax.plot」の戻り値を正しく保存することが重要です。