Matplotlibで凡例を使いこなそう!初心者向け完全ガイド

※本サイトにはプロモーション・広告が含まれています。

(最終更新月: 2024年11月)

✔こんな方におすすめの記事です

「Matplotlibでグラフの凡例をつけたい」
「グラフの凡例の位置や大きさを調整したい」
「見やすい凡例の作り方を知りたい」

✔この記事で得られること

  • Matplotlibでの凡例(legend)の基本的な使い方
  • 凡例の位置やスタイルのカスタマイズ方法
  • 実践的な凡例作成のテクニック

当記事では、Matplotlibにおける凡例(legend)の基礎から応用まで、実例を交えて詳しく解説していきます。
ぜひ最後までご覧ください。

筆者プロフィール

筆者プロフィールアイコン

【現職】プロダクトマネージャー

【副業】ブログ(月間20万PV)/YouTube/Web・アプリ制作

「プログラミング × ライティング × 営業」の経験を活かし、30後半からのIT系職へシフト。現在はプロダクトマネージャーとして、さまざまな関係者の間に入り奮闘してます。当サイトでは、実際に手を動かせるWebアプリの開発を通じて、プログラミングはもちろん、IT職に必要な情報を提供していきます。

【当ブログで紹介しているサイト】

当サイトチュートリアルで作成したデモ版日報アプリ

Django × Reactで開発したツール系Webアプリ

✔人に見せても恥ずかしくないコードを書こう

「リーダブルコード」は、わかりやすく良いコードの定義を教えてくれる本です。

  • 見るからにきれいなコードの書き方
  • コードの分割方法
  • 変数や関数の命名規則

エンジニアのスタンダートとすべき基準を一から解説しています。

何回も読むのに値する本なので、ぜひ手にとって読んでみてください。

Matplotlibの凡例(legend)とは

ここでは、Matplotlibの凡例の基本的な概念について説明します。

グラフを見やすくするために、凡例の役割を理解することが重要だからです。

  • 凡例(legend)の基本概念
  • なぜ凡例が必要なのか
  • 凡例を使う場面とメリット

凡例(legend)の基本概念

凡例(legend)とは、グラフ内の線や点が何を表しているのかを説明するための要素です。

複数のデータを1つのグラフに表示する際に、それぞれのデータが何を表しているのかを示すことができます。

以下が基本的な凡例の例です:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
plt.plot(x, np.sin(x), label='sin')
plt.plot(x, np.cos(x), label='cos')
plt.legend()
plt.show()

このコードを実行すると、正弦波と余弦波のグラフに、それぞれの線が何を表しているかを示す凡例が表示されます。

なぜ凡例が必要なのか

グラフを見る人が、データの意味を正しく理解できるようにするために凡例は欠かせません。

特に複数のデータを比較する場合、それぞれの線や点が何を表しているのかを明確に示す必要があるのです。

例えば、以下のような場合に凡例が重要になります:

# 売上データの例
months = ['1月', '2月', '3月', '4月']
sales_2022 = [100, 120, 130, 110]
sales_2023 = [110, 130, 140, 120]

plt.plot(months, sales_2022, marker='o', label='2022年')
plt.plot(months, sales_2023, marker='s', label='2023年')
plt.legend()
plt.title('月別売上の推移')
plt.show()

凡例を使う場面とメリット

凡例を使うことで、グラフの可読性が大きく向上します。

特に、ビジネスでの発表や論文での図表作成時には、専門的な知識がない人でも理解できるようにする必要があるのです。

凡例を使うと以下のようなメリットがあります:

  • データの種類を一目で識別できる
  • グラフの意味を直感的に理解できる
  • 専門知識がなくても内容が伝わりやすい

凡例の基本的な使い方

ここでは、Matplotlibで凡例を表示する基本的な方法について解説します。まずは基本を押さえることで、より複雑な使い方にも対応できるようになります。

  • labelパラメータの使い方
  • legend()関数の基本
  • 凡例の表示・非表示の制御

labelパラメータの使い方

グラフの要素に凡例を付けるには、まずlabelパラメータを設定する必要があります。

labelパラメータには、そのデータが何を表しているのかを文字列で指定します。

以下は、labelパラメータの基本的な使用例です:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 5, 50)
plt.plot(x, x**2, label='二次関数')
plt.plot(x, np.exp(x), label='指数関数')
plt.legend()
plt.show()

legend()関数の基本

legend()関数を使うことで、設定したlabelを凡例として表示できます。

基本的な使い方は非常にシンプルで、plot()などでlabelを設定した後にlegend()を呼び出すだけです。

以下のように、様々なグラフ要素に凡例をつけることができます:

plt.figure(figsize=(8, 6))
# 散布図
plt.scatter([1, 2, 3], [1, 2, 3], label='データ点')
# 線グラフ
plt.plot([1, 2, 3], [2, 4, 6], label='直線')
# 棒グラフ
plt.bar([0.5, 1.5, 2.5], [1, 1, 1], label='棒グラフ')
plt.legend()
plt.show()

凡例の表示・非表示の制御

状況に応じて、凡例の表示・非表示を制御することができます。

legend()関数の引数を使って、特定の要素だけを表示したり、完全に非表示にしたりできるのです。

制御方法の例を見てみましょう:

x = np.linspace(0, 5, 50)
line1, = plt.plot(x, x**2, label='二次関数')
line2, = plt.plot(x, x**3, label='三次関数')
line3, = plt.plot(x, np.exp(x), label='指数関数')

# 特定の要素だけを表示
plt.legend(handles=[line1, line2])  # 三次関数まで表示
# 完全に非表示にする場合
# plt.legend().remove()
plt.show()

凡例のカスタマイズ方法

ここでは、凡例の見た目をカスタマイズする方法について詳しく説明します。グラフをより見やすく、美しく仕上げるために、これらの技術は重要です。

  • 凡例の位置調整
  • フォントとスタイルの設定
  • 凡例の枠線と背景の調整

凡例の位置調整

凡例の位置は、legend()関数のlocパラメータで簡単に調整できます。

位置は文字列や数値で指定でき、グラフ内の最適な場所に配置することができます。

以下が位置調整の例です:

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 5, 100)
plt.plot(x, np.sin(x), label='sin')
plt.plot(x, np.cos(x), label='cos')

# 位置の指定方法
# 'best': 自動で最適な位置を選択
# 'upper right': 右上
# 'upper left': 左上
# 'lower right': 右下
# 'lower left': 左下
# 'center': 中央
plt.legend(loc='upper right')
plt.show()

# 数値での位置指定も可能
plt.figure()
plt.plot(x, np.sin(x), label='sin')
plt.plot(x, np.cos(x), label='cos')
# bbox_to_anchor=(x, y)で座標指定
plt.legend(bbox_to_anchor=(1.05, 1.0))
plt.tight_layout()
plt.show()

フォントとスタイルの設定

凡例のフォントサイズ、スタイル、色なども自由にカスタマイズできます。

見やすさと美しさを両立させるために、適切なフォント設定が重要です。

スタイル設定の例を見てみましょう:

plt.figure(figsize=(10, 6))
plt.plot(x, np.sin(x), label='正弦波')
plt.plot(x, np.cos(x), label='余弦波')

plt.legend(
    fontsize=12,  # フォントサイズ
    prop={'family': 'MS Gothic'},  # 日本語フォント
    framealpha=0.5,  # 背景の透明度
    edgecolor='gray',  # 枠線の色
    title='波形の種類',  # 凡例のタイトル
    title_fontsize=14  # タイトルのフォントサイズ
)
plt.show()

凡例の枠線と背景の調整

凡例の枠線や背景も細かく設定できます。

グラフ全体のデザインに合わせて、凡例の見た目を調整することで、より professional な仕上がりになります。

以下が調整例です:

plt.figure(figsize=(10, 6))
x = np.linspace(0, 5, 100)
plt.plot(x, x**2, label='二次関数')
plt.plot(x, x**3, label='三次関数')

plt.legend(
    fancybox=True,  # 角を丸くする
    shadow=True,    # 影をつける
    framealpha=1.0, # 背景の不透明度
    edgecolor='black', # 枠線の色
    borderpad=1,    # 枠線とテキストの間隔
    labelspacing=1.5 # 項目間の間隔
)
plt.show()

複雑なグラフでの凡例の活用

ここでは、より実践的な場面での凡例の使い方について説明します。複数のデータを効果的に表示するためには、凡例の適切な活用が必要不可欠だからです。

  • 複数の凡例の配置
  • 凡例のグループ化
  • 凡例の自動調整

複数の凡例の配置

1つのグラフに複数の凡例を配置することができます。

データの種類が多い場合や、異なる種類のデータを表示する場合に便利です。

以下が複数凡例の実装例です:

fig, ax = plt.subplots(figsize=(10, 6))

# 1つ目のデータセット
x = np.linspace(0, 5, 100)
line1, = ax.plot(x, np.sin(x), label='sin')
line2, = ax.plot(x, np.cos(x), label='cos')

# 2つ目のデータセット
x2 = np.linspace(0, 5, 10)
scatter = ax.scatter(x2, np.sin(x2), c='red', label='データポイント')

# 複数の凡例を配置
legend1 = ax.legend(handles=[line1, line2], loc='upper right')
ax.add_artist(legend1)  # 1つ目の凡例を保持
ax.legend(handles=[scatter], loc='lower right')

plt.show()

凡例のグループ化

関連するデータをグループ化して凡例に表示できます。

データの階層構造を視覚的に表現することで、情報をより整理して伝えることができます。

グループ化の例を見てみましょう:

x = np.linspace(0, 5, 100)

# 温度データ
temp1, = plt.plot(x, 20 + np.sin(x), 'r-', label='東京')
temp2, = plt.plot(x, 15 + np.sin(x), 'b-', label='札幌')

# 湿度データ
hum1, = plt.plot(x, 60 + np.cos(x), 'r--', label='東京')
hum2, = plt.plot(x, 55 + np.cos(x), 'b--', label='札幌')

# グループ化した凡例の作成
first_legend = plt.legend(handles=[temp1, temp2], loc='upper right', title='気温')
plt.gca().add_artist(first_legend)
plt.legend(handles=[hum1, hum2], loc='lower right', title='湿度')

plt.show()

凡例の自動調整

データの量や種類に応じて、凡例の配置を自動的に最適化できます。

グラフの要素と重なりを避けながら、最適な位置に凡例を配置することが可能です。

以下が自動調整の例です:

plt.figure(figsize=(10, 6))

# 複数のデータをプロット
for i in range(5):
    plt.plot(x, np.sin(x + i), label=f'データ{i+1}')

# 自動位置調整
plt.legend(
    loc='best',  # 最適な位置を自動選択
    ncol=2,      # 列数を2に設定
    mode='expand',  # 凡例を横に展開
    borderaxespad=0.  # グラフとの間隔
)
plt.show()

まとめ

当記事では、Matplotlibでの凡例(legend)の使い方について学習してきました。

  • 凡例の基本的な使い方とその重要性を理解できました
  • 凡例のカスタマイズ方法を習得しました
  • 実践的な凡例の活用テクニックを学びました

これらの知識を活かして、より見やすく、情報を効果的に伝えるグラフを作成してみましょう。
最初は基本的な使い方から始めて、徐々にカスタマイズを加えていくことをおすすめします。
あなたのデータ可視化スキルが、この記事をきっかけにさらに向上することを願っています。

タイトルとURLをコピーしました