【Python】グラフの凡例を初心者向けに詳しく解説
はじめに
皆さんは、データを見やすく整理したいときにグラフを利用することは多いのではないでしょうか。
Pythonではグラフの描画に便利なライブラリがいくつか存在しますが、そのなかでも有名なものがmatplotlibです。
このmatplotlibを使えば、棒グラフや折れ線グラフ、円グラフなどを自由に描くことができます。
しかし、グラフを描くだけでは、どの線やバーがどんなデータを示しているのか分かりにくい場合があります。
そのときに役立つのが凡例です。
凡例は複数の要素を視覚的に識別しやすくしてくれるため、わかりやすいデータ可視化に欠かせません。
ここでは、初心者でも理解できるように、グラフの凡例を表示する方法や活用シーンを具体的に紹介します。
この記事を読むとわかること
- Pythonでグラフを作成するときに凡例がなぜ大切なのか
- matplotlibで凡例を表示する基本的な方法
- 凡例の位置や書式をカスタマイズする方法
- 実務でデータ可視化を行う際の注意点
このようなポイントを押さえておくと、グラフに対する理解度が高まり、日々の分析やレポートに役立つようになるかもしれません。
グラフと凡例の基本的な役割
グラフを描く目的は、数値データを視覚的に整理して、情報を分かりやすく伝えることです。
棒グラフならカテゴリー別の数値比較、折れ線グラフなら経時的な変化の把握といったように、グラフごとに強みがあります。
しかし、複数の系列や種類のデータを一度に表示しようとすると「青い線は売上高?それとも生産量?」といった混乱が起きやすくなります。
そこで役立つのが凡例です。
グラフ上で色やマーカーを分けたうえで、凡例にラベルをつけておくと、データ同士の関連性がひと目で理解できます。
実務での利用シーン
実務の現場で多用されるのが、売上推移や在庫数の推移を折れ線グラフで同時に表示するといった場面です。
たとえば売上を青い折れ線、在庫数をオレンジの折れ線で表す場合、線だけでは何がどの数値なのか混同しがちです。
ですが、凡例を追加し「売上」「在庫数」と明示すれば、短時間でグラフの意味をつかめるようになります。
こうした小さな工夫が、グラフの完成度を大きく左右するといえるでしょう。
matplotlibでグラフを作る基本手順
Pythonでグラフを描画するときは、まずはmatplotlibのpyplotモジュールを読み込むのが一般的です。
次に、x軸とy軸の値を用意し、折れ線グラフならplt.plot()
, 棒グラフならplt.bar()
といった関数を使います。
最後にplt.show()
を呼び出すと、作成したグラフがウィンドウに表示されます。
凡例を利用する場合、以下のように各データ系列を描く際にlabel
引数を指定し、最後にplt.legend()
を呼び出す流れになります。
import matplotlib.pyplot as plt # x軸の値 months = [1, 2, 3, 4, 5] # データ系列A(たとえば売上) sales = [10, 15, 12, 18, 20] # データ系列B(たとえば在庫数) stock = [30, 25, 27, 20, 15] # 折れ線グラフを描く(labelに名称を指定) plt.plot(months, sales, label="売上") plt.plot(months, stock, label="在庫数") # 凡例を表示 plt.legend() # グラフの表示 plt.show()
ここでlabel
に任意の文字列を渡しておけば、そのまま凡例に表示されます。
このように、凡例の設定自体はとてもシンプルです。
凡例を表示するときの基本オプション
凡例をカスタマイズするときによく使われるのが以下のオプションです。
loc
: 凡例を配置する位置を指定するfontsize
: 凡例の文字サイズを変更するtitle
: 凡例の見出しを設定するncol
: 凡例を複数列で表示する
たとえばloc
を使うと、グラフ上部や右下など、好みの場所に凡例を配置できます。
文字サイズを変えることで、見やすさやレイアウトを調整できます。
import matplotlib.pyplot as plt months = [1, 2, 3, 4, 5] sales = [10, 15, 12, 18, 20] stock = [30, 25, 27, 20, 15] plt.plot(months, sales, label="売上") plt.plot(months, stock, label="在庫数") plt.legend(loc="upper left", fontsize=12, title="データ系列") plt.show()
この例では、凡例を左上に配置し、文字サイズを少し大きめにしました。
さらに「データ系列」という見出しをつけているので、ラベルのグループとして分かりやすくなっています。
locパラメータの種類
loc
には具体的な文字列か数値を与えることができます。
文字列で指定する場合、以下のようなオプションがよく使われます。
"best"
: 自動で空きスペースに最適な位置を決定"upper right"
: グラフの右上"upper left"
: グラフの左上"lower left"
: グラフの左下"lower right"
: グラフの右下"center right"
: グラフの中央右寄り"center left"
: グラフの中央左寄り"center"
: グラフ中央
自分のグラフのレイアウトや見やすさに合わせて使い分けることで、視覚的にバランスのよい凡例が配置できます。
複数列にしたいときはncolを使う
データ系列が多い場合は、凡例を1列で縦に並べるとスペースを取りすぎることがあります。
そんなときは、ncol
を使って複数列に並べる方法があります。
import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] data1 = [5, 7, 9, 6, 8] data2 = [2, 4, 5, 3, 6] data3 = [1, 2, 4, 7, 9] plt.plot(x, data1, label="シリーズA") plt.plot(x, data2, label="シリーズB") plt.plot(x, data3, label="シリーズC") plt.legend(ncol=2, loc="upper right") plt.show()
このコードではncol=2
としているため、凡例が2列に分かれて配置されます。
グラフ上の情報が多い場合は、このように列数を増やすと、スペースを有効に使えるようになります。
凡例を表示するときの注意点
複数のデータ系列を扱う場合、ラベルの文字列が長すぎると、凡例自体が幅を取りすぎてグラフが狭くなることがあります。
そのため、できるだけ短い言葉で的確に意味を表すようにしましょう。
具体例としては「売上」「在庫数」「利益率」といった短めの単語にまとめ、必要があればグラフやテキスト中で補足説明をつけるやり方が一般的です。
座標軸との組み合わせ方
棒グラフと折れ線グラフを同時に表示し、それぞれ別のy軸に対応させる場合があります。
その場合は凡例の付け方にひと工夫必要です。
一方の系列には「売上」、もう一方の系列には「売上の前月比」など、はっきり異なる指標名を使うと、凡例が混在しても分かりやすくなります。
import matplotlib.pyplot as plt months = [1, 2, 3, 4, 5] sales = [100, 120, 110, 130, 150] rate = [0, 20, -10, 20, 20] # 前月比を仮の数値とする fig, ax1 = plt.subplots() # 左のy軸(棒グラフ) ax1.bar(months, sales, color="skyblue", label="売上") ax1.set_ylabel("売上") # 右のy軸(折れ線) ax2 = ax1.twinx() ax2.plot(months, rate, color="orange", label="前月比(%)") ax2.set_ylabel("前月比") # 序盤で呼ぶと2つに分かれた軸それぞれに対して凡例を取得 lines1, labels1 = ax1.get_legend_handles_labels() lines2, labels2 = ax2.get_legend_handles_labels() ax1.legend(lines1 + lines2, labels1 + labels2, loc="upper left") plt.show()
このように複数のy軸を使う場合は、各軸のハンドルとラベルをまとめてlegend
に渡す方法がよく取られます。
実務では、売上や利益率など異なる指標を重ねて表現するケースが頻繁にあるため、覚えておくと便利です。
グラフの色分けやマーカーを工夫する
凡例はテキストだけでなく、色やマーカー、線の種類などが視覚の手がかりになります。
青いラインは「売上」、赤い点線は「コスト」など、凡例を見る前にも分かるようにすると、さらに見やすさが向上します。
たとえば折れ線グラフでドットをつけたい場合はmarker="o"
のように指定することができます。
import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] cost = [50, 45, 40, 48, 43] profit = [10, 12, 9, 15, 18] # 線種や色、マーカーを変えてみる plt.plot(x, cost, linestyle="--", color="red", marker="o", label="コスト") plt.plot(x, profit, linestyle="-", color="blue", marker="s", label="利益") plt.legend(loc="best") plt.show()
これによって、凡例のテキストが省略気味でも、色や線のパターンからパッと区別できるようになります。
凡例がグラフを隠してしまう場合の対処
ときには凡例がグラフの一部と重なってしまって、重要なデータポイントが見えなくなることがあります。
そういう場合は、loc="best"
で自動調整を試してみるのも手ですが、それでも覆い隠してしまうときは、直接bbox_to_anchor
という引数を使って座標を指定すると効果的です。
import matplotlib.pyplot as plt x = [1, 2, 3, 4, 5] y = [2, 4, 6, 8, 10] plt.plot(x, y, label="二倍") plt.legend(loc="upper left", bbox_to_anchor=(1, 1)) plt.title("凡例をグラフ外に出す例") plt.show()
この例では、(1, 1)
の座標(右上あたり)に凡例を配置し、グラフ本体との重なりを防いでいます。
画面サイズやグラフの縦横比を考えながら微調整すると、レイアウトがきれいに収まるようになります。
実務での注意点とカスタマイズのコツ
実務でたくさんのグラフを作成するとき、凡例の管理が煩雑になることがあります。
以下のような点を意識すると、チーム内で共有しやすいグラフに仕上がります。
1. 一貫性を持たせる
同じデータ指標は常に同じ色やマーカーを使うほうが、見慣れた人がすぐ理解しやすくなります。
2. 短く明確なラベルを使う
欄が狭い場合にラベルが切れてしまわないよう、長い文章をラベルにしないほうがよいでしょう。
3. 位置調整で重なりを防ぐ
loc
パラメータやbbox_to_anchor
を使い、重要なデータポイントを隠さないように配置を工夫します。
グラフや凡例の表示トラブルを防ぐための心得
グラフを実際に人に見せる際、以下のような注意をするとスムーズです。
テーマカラーを決めておく
会社やチームで使う主要な色を決めると、見栄えと一貫性が高まります。
座標軸の単位やタイトルを忘れない
凡例と同様、x軸やy軸にも何を表しているのか分かりやすい表記を入れましょう。
データが偏っている場合はスケール調整も検討
片方の値だけ大きすぎると、凡例以前にグラフの可視化そのものが難しくなることがあります。
グラフに凡例をつけるだけでなく、どのような色・マーカー・軸ラベルを使うかを合わせて考えると、より伝わりやすいデータ表示が実現できます。
他のライブラリを使う場合
Pythonにはmatplotlib以外にもseabornやplotlyなどのライブラリが存在します。
ただし、多くの場合は同様の考え方で凡例を設定する仕組みが整っています。
たとえばseabornでも、グラフ描画関数におけるlegend
を有効にする設定やlabel
引数が用意されていますし、plotlyでも凡例のオンオフや配置オプションが用意されています。
最終的には、どのライブラリを使っても「複数のデータ系列を分かりやすく区別する」という目的は同じですので、matplotlibで学んだ基礎知識は他でも十分に応用できます。
まとめ
Pythonでグラフを作成するとき、凡例はとても重要です。
複数のデータ系列をひとつのチャートにまとめる場合、凡例がないと何が何だか分からなくなりがちです。
しかし、凡例を正しく追加し、配置や文字サイズなどを調整すれば、グラフの見やすさと情報量を両立できます。
実務でもよくある売上や在庫、利益率といったデータをまとめるときにも、凡例があるだけで理解度が大きく変わることがあるでしょう。
色やマーカー、軸ラベルなども組み合わせて、読み手が迷わずにデータに集中できるよう工夫してみてください。
そうすれば、より明確な伝え方でビジネスやレポートに役立つグラフを作ることができるはずです。