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

【Python入門】Matplotlibで複数のグラフを1つの図に組み合わせる方法(subplot・twinx活用)

はじめに

Matplotlibは、同じグラフ上に複数のプロットを重ねて描画できる強力なPythonの可視化ライブラリです。本チュートリアルでは、2つの異なるY軸を使いながら、1つの図の中に複数のデータを組み合わせて表示する方法を、実際に動くコード例とともにわかりやすく解説します。

事前準備:Matplotlibのインストール

まず、Pythonのコマンドプロンプト(ターミナル)を開き、以下のコマンドでmatplotlibをインストールしてください。

pip install matplotlib

手順1:表示するデータを準備する

ここでは、iPhone・Galaxy・Pixelの3機種について、2016年から2020年までの販売台数(単位:百万台)を例にします。※数値は説明用のダミーデータであり、実際の統計ではありません。

import matplotlib.pyplot as plt

# データの準備(統計値はダミーです)
mobile = ['Iphone','Galaxy','Pixel']

# 2016年〜2020年のモバイル販売台数(百万台)
units_sold = (('2016',12,8,6),
('2017',14,10,7),
('2018',16,12,8),
('2019',18,14,10),
('2020',20,16,5),)

手順2:データをメーカーごとの配列に分割する

zip(*units_sold) を使うと、タプルの集まりを「年」「iPhone販売数」「Galaxy販売数」「Pixel販売数」のそれぞれの配列に簡単に分解できます。あわせて、棒グラフの表示位置(Position)と棒の幅(Width)も設定しておきましょう。

# データの分割
Years, IPhone_Sales, Galaxy_Sales, Pixel_Sales = zip(*units_sold)

# 表示位置の設定
Position = list(range(len(units_sold)))

# 棒の幅の設定
Width = 0.2

手順3:最初のサブプロットを作成する

plt.subplot(2, 1, 1) により、「縦2行 × 横1列」のレイアウトにおける1番目(上段)の描画領域を作成します。

plt.subplot(2, 1, 1)

【Python入門】Matplotlibで複数のグラフを1つの図に組み合わせる方法(subplot・twinx活用)

手順4:iPhone販売数の棒グラフを作成する

上段のサブプロットに、iPhoneの販売台数を緑色の棒グラフとして描画します。plt.xticks() でX軸の目盛りに年を表示させると、グラフが格段に読みやすくなります。

Iphone = plt.bar(Position, IPhone_Sales,color='green')
plt.ylabel('IPhone Sales')
plt.xticks(Position, Years)

【Python入門】Matplotlibで複数のグラフを1つの図に組み合わせる方法(subplot・twinx活用)

手順5:Galaxy販売数用に第2のY軸を追加する

plt.twinx() を使うと、X軸を共有したまま右側に第2のY軸を追加できます。これにより、同じグラフ上にGalaxyの販売台数を青色の折れ線グラフ(マーカー付き)として重ねて表示することが可能になります。棒グラフと折れ線グラフの組み合わせは、異なる単位や規模のデータを比較したいときに非常に便利です。

plt.twinx()
Galaxy = plt.plot(Position, Galaxy_Sales, 'o-', color='blue')
plt.ylabel('Galaxy Sales')
plt.xticks(Position, Years)

【Python入門】Matplotlibで複数のグラフを1つの図に組み合わせる方法(subplot・twinx活用)

手順6:Google Pixel販売数を下段にプロットする

続いて、plt.subplot(2, 1, 2) で2番目(下段)のサブプロットを作成し、Pixelの販売台数を黄色の折れ線グラフとして描画します。set_ylim(ymin=0) でY軸の最小値を0に固定しておくと、変化の傾向がより正確に伝わります。

plt.subplot(2, 1, 2)
plt.plot(Position, Pixel_Sales, color='yellow')
plt.gca().set_ylim(ymin=0)
plt.xticks(Position, Years)

【Python入門】Matplotlibで複数のグラフを1つの図に組み合わせる方法(subplot・twinx活用)

完成コード:全体をまとめて画像として保存する

最後に、ここまでの手順をすべてまとめた完全なコードを示します。plt.show() の代わりに plt.savefig() を使えば、作成したグラフをそのままPNG画像としてファイル保存できます(dpi引数で解像度を指定可能です)。

import matplotlib.pyplot as plt

# データの準備(統計値はダミーです)
mobile = ['Iphone','Galaxy','Pixel']

# 2016年〜2020年のモバイル販売台数(百万台)
units_sold = (('2016',12,8,6),
('2017',14,10,7),
('2018',16,12,8),
('2019',18,14,10),
('2020',20,16,5),)

# データの分割
Years, IPhone_Sales, Galaxy_Sales, Pixel_Sales = zip(*units_sold)

# 表示位置の設定
Position = list(range(len(units_sold)))

# 棒の幅の設定
Width = 0.2

plt.subplot(2, 1, 1)
Iphone = plt.bar(Position, IPhone_Sales,color='green')
plt.ylabel('IPhone Sales')
plt.xticks(Position, Years)

plt.twinx()
Galaxy = plt.plot(Position, Galaxy_Sales, 'o-', color='blue')
plt.ylabel('Galaxy Sales')
plt.xticks(Position, Years)

plt.subplot(2, 1, 2)
plt.plot(Position, Pixel_Sales, color='yellow')
plt.ylabel('Pixel Sales')
plt.gca().set_ylim(ymin=0)
plt.xticks(Position, Years)

# plt.show()
plt.savefig('CombiningGraphs.png', dpi=72)

【Python入門】Matplotlibで複数のグラフを1つの図に組み合わせる方法(subplot・twinx活用)

まとめ

このように、Matplotlibの subplot()twinx() を組み合わせることで、棒グラフと折れ線グラフなど異なる種類のグラフを柔軟に1つの図へ配置できます。複数の指標を並べて比較したいデータ分析やレポート作成の場面で、ぜひ活用してみてください。

  1. Pythonで対数ヒストグラムを作成する方法【matplotlib活用】

    Pythonのmatplotlibを使って対数(ログ)スケールのヒストグラムを作成するには、hist()メソッドの引数にlog=Trueを指定します。これにより、縦軸が対数スケールで表示され、値の範囲が大きく異なるデータも見やすく可視化できます。作成手順数値のリスト(配列)を用意します。density=Trueを指定して、正規化されたヒストグラムをプロットします。図を表示するには、show()メソッドを呼び出します。サンプルコードimport numpy as np import matplotlib.pyplot as plt plt.rcParams[figure.figsize] = [

  2. Pythonで時系列データをプロットする方法をわかりやすく解説

    Pythonのmatplotlibを使えば、時系列データ(日時を軸にしたデータ)を簡単にグラフ化できます。ここでは、datetimeオブジェクトを含むデータを折れ線グラフとして描画する基本的な手順を紹介します。 時系列プロットの基本手順 numpyを使用して、x軸(日時データ)とy軸(数値データ)を作成します。 plot()メソッドを使って、作成したx・yのデータをプロットします。 show()メソッドを実行して、図を画面に表示します。 コード例 以下のサンプルコードでは、2021年1月1日の0時から23時までの24個の日時データを生成し、それに対応するランダムな数値をy軸としてプロットし