テクノロジー
2024年11月15日Matplotlibとは
Matplotlibは、2次元や3次元のデータを使って、折れ線グラフや棒グラフ、円グラフなどさまざまなグラフを描画し、データを可視化するためのライブラリです。
目次
著者プロフィール
ゴール
Matplotlibとは
MATLABスタイル
オブジェクト指向スタイル
Matplotlibのインポート
描画オブジェクトとサブプロットの役割
グラフを複数描画する方法
書式設定の基本
表示スタイル
タイトル
軸ラベル
凡例
まとめ
公式ドキュメント・参考情報
著者プロフィール
IT分野における教育の先駆者として、多くのエンジニアを育成するプログラミングスクールの運営、Web開発やAI研修を行なっています。幅広いレベルの受講生に対して実践的なスキルを提供。生徒の成長を第一に考え、効果的で魅力的な教育プログラムの設計に情熱を注いでいます。
ゴール
- Matplotlibの特徴と基本的な使い方を理解する
Matplotlibとは
Matplotlibは、2次元や3次元のデータを使って、折れ線グラフや棒グラフ、円グラフなどさまざまなグラフを描画し、データを可視化するためのライブラリです。
Matplotlibでグラフをビューする際のコードの書き方は、MATLABスタイルとオブジェクト指向スタイルの2種類があります。
MATLABスタイル
MATLABスタイルの書き方は、後述するオブジェクト指向スタイルに比べて柔軟性が劣りますが、簡単なグラフを素早く描画する際に便利です。
以下は、MATLABスタイルを使用した場合のコード例です。
import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [2, 4, 6]
plt.plot(x, y)
plt.show()
[実行結果]
コードの詳しい内容については後ほど説明しますので、ここでは、オブジェクト指向スタイルとの書き方をなんとなくイメージする程度で問題ありません。
次に、オブジェクト指向スタイルの書き方についても見てみましょう。
オブジェクト指向スタイル
オブジェクト指向スタイルでは、描画オブジェクト(Figureオブジェクト)と呼ばれるグラフを描画する大枠を用意し、その中にサブプロット(Axesオブジェクト)と呼ばれるグラフを描画する領域を追加します。
そして、追加したサブプロットに対して、どのようなデータを使用するかやどのグラフで描画するかなどを指定します。
このように、描画オブジェクトとサブプロットが分離していることで、一度に複数のグラフを描画できます。
以下は、先ほどMATLABスタイルで描いたグラフをオブジェクト指向スタイルで描画した場合のコード例です。
import matplotlib.pyplot as plt
x = [1, 2, 3]
y = [2, 4, 6]
fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()
本テキストでは複雑なグラフも描けるよう、オブジェクト指向スタイルの書き方で解説します。
Matplotlibのインポート
Matplotlibを使用するには、初めにインポートしておく必要があります。
Matplotlibをインポートするには、以下のようにコードを記述し、実行します。
import matplotlib.pyplot as plt
描画オブジェクトとサブプロットの役割
サブプロットは、グラフを描画するフィールドのことで、一度に複数同時に描画することも可能です。
また、描画オブジェクトは、サブプロット上に描かれる折れ線グラフや棒グラフといったオブジェクトを指します。
先ほどオブジェクト指向スタイルの説明で例に挙げたコードを改めて確認してみましょう(Matplotlibをインポートする記述は省略しています)。
x = [1, 2, 3]
y = [2, 4, 6]
fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()
plt.subplots()
が呼ばれると、1つの描画オブジェクトと1つのサブプロットが生成されます。
生成された描画オブジェクトとサブプロットはそれぞれ変数fig
とax
に代入されます。
この時点で、plt.show()
を実行すると以下のようなグラフが描画されます。
x = [1, 2, 3]
y = [2, 4, 6]
fig, ax = plt.subplots()
plt.show()
この時点では、サブプロットに何も値を指定していないので、描画オブジェクトとサブプロットのみが表示されます。
次の行のax.plot(x, y)
でサブプロットに使用する値を追加しています。
この場合、X軸が1, 2, 3
、Y軸が2, 4, 6
のグラフが描かれるよう指定しています。
最後にplt.show()
で定義したグラフを描画させています。
ちなみにplt.show()
を省略してもグラフ自体は描画できますが、オブジェクト名も余計に出力されます。
また、実行環境やバージョンによってグラフがうまく出力されない場合があるので、基本的にはplt.show()
を使ってグラフを描画するようにしましょう。
グラフを複数描画する方法
ここまでは、1つのグラフのみを描画する方法について説明してきました。
今度は、2つのグラフを描画する方法について説明します。
ここでは、グラフの描画で使用する値として、2組の変数を用意します。
x1 = [1, 2, 3]
y1 = [2, 4, 6]
x2 = [1, 2, 3]
y2 = [-2, -4, -6]
次にサブプロットを2つ用意します。
サブプロットを複数使用する場合は、plt.subplots()
の引数にサブプロットの数を指定します。
ここでは、サブプロットを2つ使いたいので、2
を指定します。
x1 = [1, 2, 3]
y1 = [2, 4, 6]
x2 = [1, 2, 3]
y2 = [-2, -4, -6]
fig, axes = plt.subplots(2)
この時点でplt.show()
を実行すると、2つのサブプロットが描画されます。
それでは、それぞれのサブプロットに描くグラフの値を指定しましょう。
変数axes
には、2つのAxesオブジェクト(サブプロット)が格納されており、インデックスを指定することで特定のAxesオブジェクトを取得できます。
それぞれのAxesオブジェクトに対してグラフで使用する値を設定します。
最終的に以下のコードが出来上がります。
x1 = [1, 2, 3]
y1 = [2, 4, 6]
x2 = [1, 2, 3]
y2 = [-2, -4, -6]
fig, axes = plt.subplots(2)
axes[0].plot(x1, y1)
axes[1].plot(x2, y2)
plt.show()
[実行結果]
この他にも、行と列を指定することでサブプロットのレイアウト構造を指定できます。
以下は、2行2列のレイアウト構造でサブプロットを描画する場合の例です。
fig, ax = plt.subplots(2, 2)
plt.show()
また、行数と列数はnrows
とncols
というパラメータでも指定できます。
以下は、1行2列のレイアウトでサブプロットを描画する場合の例です。
fig, ax = plt.subplots(ncols=2)
plt.show()
nrows
とncols
のデフォルト値は1
が設定されているため、上記のようにnrows
に値を指定しない場合は1
が指定されます。
書式設定の基本
ここでは、グラフのスタイルやタイトル、凡例といった書式設定について説明します。
表示スタイル
matplotlib.style
というモジュールを使用することで、グラフの表示スタイルを変更できます。
matplotlib.style
を使用するには、事前にインポートしておく必要があります。
import matplotlib.style
以下のコードを実行することで、利用可能なスタイル一覧を表示できます。
matplotlib.style.available
[実行結果]
['Solarize_Light2',
'_classic_test_patch',
'bmh',
'classic',
'dark_background',
'fast',
'fivethirtyeight',
'ggplot',
'grayscale',
'seaborn',
'seaborn-bright',
'seaborn-colorblind',
'seaborn-dark',
'seaborn-dark-palette',
'seaborn-darkgrid',
'seaborn-deep',
'seaborn-muted',
'seaborn-notebook',
'seaborn-paper',
'seaborn-pastel',
'seaborn-poster',
'seaborn-talk',
'seaborn-ticks',
'seaborn-white',
'seaborn-whitegrid',
'tableau-colorblind10']
試しに、いくつかスタイルを変更してみましょう。
以下のようにmatplotlib.style
のuse
関数を使って、引数に指定したいスタイルを指定することで、スタイルを変更できます。
[seabornスタイルを指定した場合]
matplotlib.style.use('seaborn')
x = [1, 2, 3]
y = [2, 4, 6]
fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()
[実行結果]
[dark_backgroundスタイルを指定した場合]
matplotlib.style.use('dark_background')
x = [1, 2, 3]
y = [2, 4, 6]
fig, ax = plt.subplots()
ax.plot(x, y)
plt.show()
[実行結果]
タイトル
描画オブジェクトとサブプロットにはそれぞれタイトルを設定できます。
描画オブジェクトにタイトルを設定する場合はsuptitle
メソッドを使用し、サブプロットごとにタイトルを設定する場合はset_title
メソッドを使用します。
x1 = [1, 2, 3]
y1 = [2, 4, 6]
x2 = [1, 2, 3]
y2 = [-2, -4, -6]
fig, axes = plt.subplots(1, 2)
axes[0].plot(x1, y1)
axes[1].plot(x2, y2)
axes[0].set_title('Subplot1 title')
axes[1].set_title('Subplot2 title')
fig.suptitle('Graph title')
plt.show()
[実行結果]
(実行するエディタの設定等によって描画が横並びや縦並びになる場合があります。)
軸ラベル
グラフのX軸とY軸にそれぞれラベルを設定する方法について説明します。
X軸にラベルを設定する場合はset_xlabel
メソッド、Y軸にラベルを設定する場合はset_ylabel
メソッドを使用します。
ここでは、X軸にX label
、Y軸にY label
と表示させてみましょう。
x = [1, 2, 3]
y = [2, 4, 6]
fig, ax = plt.subplots()
ax.plot(x, y)
ax.set_xlabel('X label')
ax.set_ylabel('Y label')
plt.show()
[実行結果]
凡例
凡例を表示させるには、plot
メソッドでサブプロットに値を設定する際にlabel
パラメータを使って表示させる凡例名を設定します。
ここでは、sample legend
という名前で凡例名を指定してみましょう。
x = [1, 2, 3]
y = [2, 4, 6]
fig, ax = plt.subplots()
ax.plot(x, y, label='sample legend')
ax.legend()
plt.show()
[実行結果]
ax.legend()
で凡例を出力させています。
legend
メソッドでは、loc
パラメータを指定することで凡例の表示位置を指定できます。
例えば、凡例を右下に表示させたい場合は、loc
パラメータにlower right
を指定します。
x = [1, 2, 3]
y = [2, 4, 6]
fig, ax = plt.subplots()
ax.plot(x, y, label='sample legend')
ax.legend(loc='lower right')
plt.show()
[実行結果]
以下の表は、loc
で指定可能な値の一例です。
値 | 表示位置 |
---|---|
best |
グラフとの重なりが最小となる位置 |
upper left |
左上 |
lower right |
右下 |
center |
上下左右中央 |
center left |
上下中央左寄り |
centor low |
左右中央上寄り |
また、bbox_to_anchor
パラメータを使用することで、座標を指定できます。
bbox_to_anchor
の指定方法については、公式ドキュメントを確認しましょう。
bbox_to_anchor
まとめ
- Matplotlibの記法には、MATLABスタイルとオブジェクト指向スタイルの2種類が存在する。
- MATLABスタイルは、簡易なグラフを瞬時に描画したい場合に適しており、オブジェクト指向スタイルは、より複雑なグラフの描画に適している。
- オブジェクト指向スタイルの場合、描画オブジェクトとサブプロットが分離していることで、一度に複数のグラフを描画できる。
- Matplotlibは、書式設定に関するさまざまな関数やメソッド、パラメータを用意している。