Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlibで凡例と第2Y軸を使って同じプロットに2つのPandas時系列を描画する方法

MatplotlibとPandasを組み合わせることで、異なるスケールを持つ2つの時系列データを1つのグラフ上に簡単に重ねて描画できます。この記事では、凡例第2Y軸(secondary Y-axis)を使用して、2つのPandas時系列を同じプロットに表示する手順を解説します。

実装の手順

  • figure.figsizeで図のサイズを設定し、figure.autolayoutでサブプロット周辺の余白を自動調整します。

  • 日付インデックス(時系列)を持つ1次元のndarrayを作成します。

  • 複数の列を持つDataFrameを作成します。

  • DataFrameのplot()メソッドを使って、列Aと列Bを描画します。このとき、2番目の系列にはsecondary_y=Trueを指定して第2Y軸に割り当てます。

  • get_legend_handles_labels()メソッドを使って、各軸の凡例用ハンドルとラベルを取得します。

  • legend()メソッドで、両方の系列の情報をまとめた凡例を図に配置します。

  • show()メソッドで図を表示します。

コード例

import pandas as pd
from matplotlib import pyplot as plt
import numpy as np

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

ts = pd.Series(np.random.randn(10), index=pd.date_range('2021-04-10', periods=10))

df = pd.DataFrame(np.random.randn(10, 4), index=ts.index, columns=list('ABCD'))

ax1 = df.A.plot(color='red', label='Count')
ax2 = df.B.plot(color='yellow', secondary_y=True, label='Sum')

h1, l1 = ax1.get_legend_handles_labels()
h2, l2 = ax2.get_legend_handles_labels()

plt.legend(h1+h2, l1+l2, loc=2)

plt.show()

ポイント解説

このコードの重要なポイントは以下の通りです。

  • secondary_y=Trueを指定することで、列Bは右側の第2Y軸に対して描画されます。これにより、単位やスケールが異なる2つの系列を1つのグラフで比較できます。

  • それぞれの軸(ax1ax2)から取得した凡例ハンドルとラベルをh1+h2l1+l2のように連結することで、両方の系列を含む統合的な凡例を作成できます。

  • loc=2は凡例を左上に配置することを意味します。必要に応じて'best'などの値に変更可能です。

出力結果

上記のコードを実行すると、赤色の線(Count:左Y軸基準)と黄色の線(Sum:右Y軸基準)が同じプロット内に描画され、左上には両系列の凡例が表示されます。

  1. Matplotlibの折れ線グラフでY軸に複数のPandas列をプロットする方法

    折れ線グラフのY軸に複数のPandas列をプロットしたい場合、set_index()メソッドを使ってインデックスを設定するのが簡単な方法です。この記事では、その具体的な手順とコード例を紹介します。実行手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。「Category 1」「Category 2」「Category 3」の3つの列を持つデータフレームを作成します。set_index()メソッドを使用して、既存の列からDataFrameのインデックスを設定します。図を表示するには、show()メソッドを呼び出します。コード例import pandas as pd

  2. MatplotlibでNaN値を含むデータをプロット・操作する方法を解説

    MatplotlibでNaN値をプロット・操作する手順 Matplotlibでは、NaN(欠損値)を含むデータもそのまま可視化できます。基本的な流れは以下の3ステップです。 NumPyを使って、NaN値をいくつか含むデータ(配列)を作成します。 imshow()メソッドを使用し、カラーマップとステップ1で作成したデータを指定して、2次元の正規ラスタ上に画像として表示します。デフォルトでは、NaNの部分は自動的に空白(マスクされた領域)として描画されます。 作成した図を画面に表示するには、show()メソッドを呼び出します。 コード例 import numpy as np from matp