🤖

[Matplotlib入門シリーズ第3回] グラフ装飾(タイトル・軸・凡例・グリッド・表示範囲)

に公開

はじめに

本記事は「Pythonでデータを可視化するMatplotlib入門」シリーズの第3回です.

前記事では,「データを描き分ける」ことを目標にしました.

本記事では 第三者が一目見て,即座に理解できるグラフ作成 のために,

  • タイトル
  • 軸ラベル
  • 凡例
  • グリッド
  • グラフの表示範囲

を説明します.

私のMatplotlibライブラリのバージョンは "3.7.0" です.

本シリーズの構成

本シリーズの構成予定(全11記事)は以下を想定しています.

  1. Matplotlibのインストール 〜 線グラフの描画
  2. 基本的な2次元プロット(線グラフ・点グラフ・複数データ・グラフの見た目)
  3. グラフ装飾(タイトル・軸・凡例・グリッド・表示範囲)(本記事)
  4. 様々なグラフ(ヒストグラム・散布図など)
  5. サブプロット
  6. 2次元図形の描画(公開後にリンクを追加する予定)
  7. 画像表示とヒートマップ(公開後にリンクを追加する予定)
  8. 3次元プロット(公開後にリンクを追加する予定)
  9. 3次元図形の描画(公開後にリンクを追加する予定)
  10. アニメーション描画1(公開後にリンクを追加する予定)
  11. アニメーション描画2(公開後にリンクを追加する予定)

本シリーズのゴール

本シリーズでは,以下のポイントが実装できるようになることを目標としています.

  • 目的に応じたグラフを選択できるようになる
  • 誰にでも分かるようなグラフを作成できるようになる
  • 意図通りにアルゴリズムが動いているかのアニメーションを作成できるようになる

グラフの可視化を "判断・説明・検証" に使えるようになること.

本記事のゴール

本記事では,以下の内容を学ぶことができます.

  • グラフのタイトル追加
  • 軸が何を表しているかを明示
  • 複数データを凡例で区別
  • グリッドによる可読性の向上
  • グラフの表示範囲を設定

第三者が一目見て,即座に理解できるグラフを作成できること が,本記事のゴールです.

MatplotlibライブラリとNumPyライブラリの読み込み

Matplotlibを使うためには,まずライブラリの読み込みから始めます.
NumPyにより可視化したいデータを作成し,Matplotlibによりデータを可視化します.

import matplotlib.pyplot as plt
import numpy as np

numpyライブラリを np という名前として,扱えるようにしています.
matplotlibライブラリのpyplotモジュールを plt という名前として,扱えるようにしています.
以降では pltnp という名前を使っていきます.

タイトルの追加

タイトルの追加として,下図のようなサイン関数を描画します.
タイトル追加したサイン関数
タイトルを追加したグラフ

# X軸(横軸)のデータを作成
x = np.linspace(0, 10, 111)
# Y軸(縦軸)のデータをサイン関数として作成
y = np.sin(x)

# サイン関数のグラフ作成
plt.plot(x, y)
# グラフにタイトルを追加
plt.title("Sin Curve")
# 作成したグラフを画面に表示
plt.show()

plt.title() の概要,引数,戻り値に関して,下表にまとめました.

備考
概要 タイトルの追加 -
引数 たくさんある 後ほど説明
戻り値 Textオブジェクト アニメーションなどの動的な処理で使用
具体的には,タイトルを後から変更する際に使用

使用頻度の高い plt.title() の引数を下表にまとめました.

引数 意味 備考
label タイトルの文字列 必須な引数
loc タイトルの位置 "center":中央
"left":左寄せ
"right":右寄せ
fontsize フォントの大きさ -
color 文字の色 -

plt.title() の引数 loc, fontsize, color の設定値およびグラフを下記に示します.

| 引数 | 意味 | Fig. 1-1 | Fig. 1-2 | Fig. 1-3 |
| --- | --- | --- | --- | --- | --- |
| loc | タイトルの位置 | "center" | "left" | "right" |
| fontsize | フォントの大きさ | 14 | 18 | 24 |
| color | 文字の色 | "red" | "green" | "blue" |

loc="center"_fontsize=14_color="red"のグラフ
Fig. 1-1

loc="left"_fontsize=18_color="green"のグラフ
Fig. 1-2

loc="right"_fontsize=24_color="blue"のグラフ
Fig. 1-3

表に記載していない plt.title() の引数に関しては,下記サイトを確認してください.
Matplotlib公式リファレンス

タイトルは,グラフの主題を一言で説明 します.

軸ラベルの追加

軸ラベルの追加として,下図のようなサイン関数を描画します.
軸ラベル追加のサイン関数
軸ラベルを追加したグラフ

# X軸(横軸)のデータを作成
x = np.linspace(0, 10, 111)
# Y軸(縦軸)のデータをサイン関数として作成
y = np.sin(x)

# サイン関数のグラフ作成
plt.plot(x, y)
# グラフにタイトルを追加
plt.title("Sin Curve")
# X軸(横軸)にラベルを追加
plt.xlabel("x value[rad]")
# Y軸(縦軸)にラベルを追加
plt.ylabel("sin(x)")
# 作成したグラフを画面に表示
plt.show()

plt.xlabel() の概要,引数,戻り値に関して,下表にまとめました.

備考
概要 X軸(横軸)にラベルを追加 -
引数 たくさんある 後ほど説明(plt.ylabel()と同じ)
戻り値 Textオブジェクト アニメーションなどの動的な処理で使用.具体的には,軸ラベルを後から変更する際に使用

plt.ylabel() の概要,引数,戻り値に関して,下表にまとめました.

備考
概要 Y軸(縦軸)にラベルを追加 -
引数 たくさんある 後ほど説明(plt.xlabel()と同じ)
戻り値 Textオブジェクト アニメーションなどの動的な処理で使用.具体的には,軸ラベルを後から変更する際に使用

使用頻度の高い plt.xlabel() の引数を下表にまとめました.

引数 意味 備考
label 軸ラベルの文字列 必須な引数
fontsize フォントの大きさ -
loc ラベルの位置 "center":中央,"left":左寄せ,"right":右寄せ

使用頻度の高い plt.ylabel() の引数を下表にまとめました.

引数 意味 備考
label 軸ラベルの文字列 必須な引数
fontsize フォントの大きさ -
loc ラベルの位置 "center":中央,"bottom":下寄せ,"top":上寄せ

plt.xlabel()plt.ylabel() の引数 loc, fontsize の設定値およびグラフを下記に示します.

| 引数 | 意味 | Fig. 2-1 | Fig. 2-2 | Fig. 2-3 |
| --- | --- | --- | --- | --- | --- |
| plt.xlabel の loc | ラベルの位置 | "center" | "left" | "right" |
| plt.xlabel の fontsize | フォントの大きさ | 14 | 18 | 20 |
| plt.ylabel の loc | ラベルの位置 | "bottom" | "top" | "center" |
| plt.ylabel の fontsize | フォントの大きさ | 14 | 18 | 20 |

plt.xlabel("x value[rad]", loc="center", fontsize=14)_plt.ylabel("sin(x)", loc="bottom", fontsize=14)のグラフ
Fig. 2-1

plt.xlabel("x value[rad]", loc="left", fontsize=18)_plt.ylabel("sin(x)", loc="top", fontsize=18)のグラフ
Fig. 2-2

plt.xlabel("x value[rad]", loc="right", fontsize=20)_plt.ylabel("sin(x)", loc="center", fontsize=20)のグラフ
Fig. 2-3

表に記載していない plt.xlabel()plt.ylabel() の引数に関しては,下記サイトを確認してください.
Matplotlib公式リファレンス

軸ラベルは,各軸の意味を明示 します.
単位を追加すると,可読性の向上 に繋がります.

凡例の追加

凡例の追加として,下図のようなサイン関数とコサイン関数を描画します.
凡例を追加したグラフ
凡例を追加したグラフ

# X軸(横軸)のデータを作成
x = np.linspace(0, 10, 111)
# Y軸(縦軸)のデータをサイン関数として作成
y_sin = np.sin(x)
# Y軸(縦軸)のデータをコサイン関数として作成
y_cos = np.cos(x)

# サイン関数のグラフ作成
plt.plot(x, y_sin, linestyle="solid",   color="red",  label="sin")
# コサイン関数のグラフ作成
plt.plot(x, y_cos, linestyle="dashdot", color="cyan", label="cos")
# グラフにタイトルを追加
plt.title("Sin And Cos Curve")
# X軸(横軸)にラベルを追加
plt.xlabel("x value[rad]")
# Y軸(縦軸)にラベルを追加
plt.ylabel("y value")
# 凡例を表示
plt.legend()
# 作成したグラフを画面に表示
plt.show()

plt.legend() の概要,引数,戻り値に関して,下表にまとめました.

備考
概要 凡例を表示 -
引数 たくさんある 後ほど説明
戻り値 Legendオブジェクト アニメーションなどの動的な処理で使用.具体的には,凡例の情報を後から変更する際に使用

使用頻度の高い plt.legend() の引数を下表にまとめます.

引数 意味
loc 凡例の位置
fontsize フォントの大きさ

plt.legend() の引数である loc を変更することによって,凡例の位置を変更できます.
loc の設定値およびグラフを下記に示します.

設定値 意味 グラフ名
"upper right" 右上 Fig. 3-1
"upper center" 真ん中上 Fig. 3-2
"upper left" 左上 Fig. 3-3
"center right" 真ん中右 Fig. 3-4
"center" 中央 Fig. 3-5
"center left" 真ん中左 Fig. 3-6
"lower right" 右下 Fig. 3-7
"lower center" 真ん中下 Fig. 3-8
"lower left" 左下 Fig. 3-9
"right" Fig. 3-10

凡例の位置が右上のグラフ
Fig. 3-1

凡例の位置が真ん中上のグラフ
Fig. 3-2

凡例の位置が左上のグラフ
Fig. 3-3

凡例の位置が真ん中右のグラフ
Fig. 3-4

凡例の位置が中央のグラフ
Fig. 3-5

凡例の位置が真ん中左のグラフ
Fig. 3-6

凡例の位置が右下のグラフ
Fig. 3-7

凡例の位置が真ん中下のグラフ
Fig. 3-8

凡例の位置が左下のグラフ
Fig. 3-9

凡例の位置が右のグラフ
Fig. 3-10

表に記載していない plt.legend() の引数に関しては,下記サイトを確認してください.
Matplotlib公式リファレンス

plt.legend() が重要な理由を下記にまとめました.

  • 各グラフの意味を第三者に伝える
  • 複数データを1つのグラフで同時描画する際に必須

グリッドの追加

グリッドの追加として,下図のようなサイン関数とコサイン関数を描画します.
グリッドを追加したグラフ
グリッドを追加したグラフ

# X軸(横軸)のデータを作成
x = np.linspace(0, 10, 111)
# Y軸(縦軸)のデータをサイン関数として作成
y_sin = np.sin(x)
# Y軸(縦軸)のデータをコサイン関数として作成
y_cos = np.cos(x)

# サイン関数のグラフ作成
plt.plot(x, y_sin, linestyle="solid",   color="red",  label="sin")
# コサイン関数のグラフ作成
plt.plot(x, y_cos, linestyle="dashdot", color="cyan", label="cos")
# グラフにタイトルを追加
plt.title("Sin And Cos Curve")
# X軸(横軸)にラベルを追加
plt.xlabel("x value[rad]")
# Y軸(縦軸)にラベルを追加
plt.ylabel("y value")
# 凡例を表示
plt.legend()
# グリッドを表示
plt.grid(True)
# 作成したグラフを画面に表示
plt.show()

plt.grid() の概要,引数,戻り値に関して,下表にまとめました.

備考
概要 グリッドを表示 -
引数 たくさんある 後ほど説明
戻り値 なし(None) -

使用頻度の高い plt.grid() の引数を下表にまとめます.

引数 意味 備考
visible グリッドの表示/非表示 デフォルトが表示(True)
which どのグリッドを表示するか "major":主目盛り(デフォルト),"minor":補助目盛り,"both":両方
axis どの軸にグリッドを引くか "x":X軸のみ,"y":Y軸のみ,"both":両方(デフォルト)

whichが"minor"を使うには,事前にplt.minorticks_on()が必須です.

plt.grid() の引数 which, axis の設定値およびグラフを下記に示します.

| 引数 | 意味 | Fig. 4-1 | Fig. 4-2 | Fig. 4-3 |
| --- | --- | --- | --- | --- | --- |
| which | どのグリッドを表示するか | "major" | "minor" | "both" |
| axis | どの軸にグリッドを引くか | "x" | "y" | "both" |

plt.grid(True, which="major", axis="x")のグラフ
Fig. 4-1

plt.grid(True, which="minor", axis="y")のグラフ
Fig. 4-2

plt.grid(True, which="both", axis="both")のグラフ
Fig. 4-3

表に記載していない plt.grid() の引数に関しては,下記サイトを確認してください.
Matplotlib公式リファレンス

グリッドの表示をすることで,値の読み取りが簡単 になります.

表示範囲を設定

表示範囲の設定として,下図のようなサイン関数とコサイン関数を描画します.
表示範囲を設定したグラフ
表示範囲を設定したグラフ

# X軸(横軸)のデータを作成
x = np.linspace(0, 10, 111)
# Y軸(縦軸)のデータをサイン関数として作成
y_sin = np.sin(x)
# Y軸(縦軸)のデータをコサイン関数として作成
y_cos = np.cos(x)

# サイン関数のグラフ作成
plt.plot(x, y_sin, linestyle="solid",   color="red",  label="sin")
# コサイン関数のグラフ作成
plt.plot(x, y_cos, linestyle="dashdot", color="cyan", label="cos")
# グラフにタイトルを追加
plt.title("Sin And Cos Curve")
# X軸(横軸)にラベルを追加
plt.xlabel("x value[rad]")
# Y軸(縦軸)にラベルを追加
plt.ylabel("y value")
# 凡例を表示
plt.legend()
# グリッドを表示
plt.grid(True)
# X軸(横軸)の表示範囲を設定
plt.xlim(np.min(x), np.max(x))
# Y軸(縦軸)の表示範囲を設定
plt.ylim(min(np.min(y_sin), np.min(y_cos)), max(np.max(y_sin), np.max(y_cos)))
# グラフを画面作成したグラフを画面に表示に表示
plt.show()

plt.xlim() の概要,引数,戻り値に関して,下表にまとめました.

備考
概要 X軸(横軸)の表示範囲を設定 -
引数 たくさんある 後ほど説明(plt.ylim()と同じ)
戻り値 tuple (下限値, 上限値)が返される

plt.ylim() の概要,引数,戻り値に関して,下表にまとめました.

備考
概要 Y軸(縦軸)の表示範囲を設定 -
引数 たくさんある 後ほど説明(plt.xlim()と同じ)
戻り値 tuple (下限値, 上限値)が返される

使用頻度の高い plt.xlim()plt.ylim() の引数を下表にまとめます.

引数 意味
bottom 下限値
top 上限値

表示範囲を設定することで,重要な範囲を強調する ことができます.

終わりに

本記事では,Matplotlibのグラフ装飾に関する以下の内容を説明しました.

  • plt.title():グラフのタイトル(主題)
  • plt.xlabel()/plt.ylabel():各軸の意味
  • plt.legend():複数データを判別するための凡例を表示
  • plt.grid():データの値を理解するためのグリッドを表示
  • plt.xlim()/plt.ylim():表示範囲を設定

次回予告

第4回では,以下のような「様々なグラフの作成」に焦点を当てます.

  • ヒストグラム
  • 棒グラフ
  • 散布図
  • 円グラフ

データに応じたグラフ作成 を実装できるようになります.

参考文献

本記事を作成するに当たって参考にしたサイトをまとめました.

Discussion