Matplotlib は Python で最も広く使われているデータ可視化ライブラリの 1 つです。
一般的に、複数の変数を可視化する場合、プロットに凡例を追加し、それぞれの変数が何を表しているかを説明したいと思うことでしょう。
この記事では、Matplotlib のプロットに凡例を追加する方法について見ていきます。
プロットの作成
まず、2つの変数で簡単なプロットを作ってみましょう。
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
x = np.arange(0, 10, 0.1)
y = np.sin(x)
z = np.cos(x)
ax.plot(y, color='blue')
ax.plot(z, color='black')
plt.show()
ここでは、0
から始まり 10
で終わるサイン関数と 0.1
のステップを持つコサイン関数を同じ区間とステップでプロットしています。
このコードを実行すると、次のようになります。
さて、このコードを書いていない人がどれがどれだかもっと簡単に見分けられるように、これらにラベルを付けて凡例を追加すると非常に便利でしょう。
Matplotlib で図に凡例を追加する
このプロットに凡例を追加してみましょう。
まず、これらの変数に label
を付け、凡例の中でそれらのラベルを参照できるようにします。
そして、 ax
オブジェクトに対して legend()
を呼び出すだけで、凡例が追加されます。
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots()
x = np.arange(0, 10, 0.1)
y = np.sin(x)
z = np.cos(x)
ax.plot(y, color='blue', label='Sine wave')
ax.plot(z, color='black', label='Cosine wave')
leg = ax.legend()
plt.show()
さて、このコードを実行すると、プロットは凡例を持つようになります。
凡例が自動的に、波がその上を通らないような唯一の空きスペースに置かれたことに注意してください。
Matplotlibで凡例をカスタマイズする
凡例が追加されましたが、ちょっとごちゃごちゃしていますね。
周りのボーダーを削除して別の場所に移動し、プロットのサイズも変更してみましょう。
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize=(12, 6))
x = np.arange(0, 10, 0.1)
y = np.sin(x)
z = np.cos(x)
ax.plot(y, color='blue', label='Sine wave')
ax.plot(z, color='black', label='Cosine wave')
leg = ax.legend(loc='upper right', frameon=False)
plt.show()
この結果
ここでは、 loc
引数を使って、凡例を右上隅に置くことを指定しています。
他の値としては、 upper left
, lower left
, upper right
, lower right
, upper center
, lower center
, center left
, center right
が使用可能です。
さらに、 center
を使用すると、デッドセンターに配置することができます。
また、 best
を使用すると、他の要素と重ならないように、「最適な」フリースポットに凡例を配置することができます。
デフォルトでは、 best
が選択されています。
軸の外側に凡例を追加
時々、プロットのボーダーボックス内に凡例を配置するのが厄介なことがあります。
おそらく、多くの要素があり、ボックス全体が重要なデータで満たされているのでしょう。
そのような場合、凡例を軸の外側に、それを構成する要素から離れたところに配置することができます。
これは bbox_to_anchor
引数で行います。
この引数は、凡例のアンカーをどこにするかを指定します。
import matplotlib.pyplot as plt
import numpy as np
fig, ax = plt.subplots(figsize=(12, 6))
x = np.arange(0, 10, 0.1)
y = np.sin(x)
z = np.cos(x)
ax.plot(y, color='blue', label='Sine wave')
ax.plot(z, color='black', label='Cosine wave')
leg = ax.legend(loc='center', bbox_to_anchor=(0.5, -0.10), shadow=False, ncol=2)
plt.show()
この結果、以下のようになります。
bbox_to_anchor引数は、いくつかの引数を受け取ります。
まず、タプルを受け取ります。
タプルは最大4つの要素を持つことができます。
ここでは、凡例のx、
y、
width、
height` を指定することができます。
ここでは x
と y
のみを指定し、軸から -0.10
だけずらし、左側から 0.5
だけずらしました (0
がボックスの左側、 1
が右側です)。
これらを微調整することで、任意の場所に凡例を設定することができます。
ボックスの内側でも外側でも。
次に、shadow
をFalse
に設定しています。
これは、凡例の下に小さな影をレンダリングするかどうかを指定するために使用します。
最後に、 ncol
引数を 2
に設定します。
これは、1つのカラムに含まれるラベルの数を指定します。
ここでは、2つのラベルを1つの列に並べたいので、2
に設定しました。
もし、この引数を 1
に変更すると、2つのラベルは1つずつ上に配置されることになります。
Note: bbox_to_anchor
引数は loc
引数と一緒に使用されます。
loc引数は
bbox_to_anchorに基づいて凡例が配置されます。
この例では、ボーダーボックスの新しい位置、ずらした位置のcenter` に配置します。
結論
このチュートリアルでは、Matplotlib のプロットに凡例を追加する方法について説明しました。
まず、凡例がどこにあるべきかを Matplotlib に判断させ、その後、 bbox_to_anchor
引数を使用して、軸の外側の独自の場所を指定しました。
もしあなたがデータ可視化に興味があり、何から始めたらいいかわからないなら、Pythonでデータ可視化に関する私たちの本の束をチェックしてみてください。
Pythonによるデータ可視化
期間限定割引。
30日間返金保証付き
初級から上級まで
定期的に無料で更新(最新更新は2021年4月)
ボーナスリソースやガイドを更新
Pythonでデータ可視化 MatplotlibとPandasは、Pythonの基礎知識を持つ全くの初心者が、PandasとMatplotlibを使用して、単純なプロットからインタラクティブなボタンを持つアニメーションの3Dプロットまで、これらのライブラリの上級作業の強力な基盤を構築できるように設計された書籍です。
本書は、Pythonの基本的な知識を持つ方を対象としています。
PandasとMatplotlibについて知っておく必要があることすべてを教えてくれる、詳細なガイドです。
Pythonによるデータ可視化」は、Pythonの初級~中級開発者向けの書籍で、Pandasを使った簡単なデータ操作から、MatplotlibやSeabornなどのコアなプロットライブラリを取り上げ、Altairなどの宣言型ライブラリや実験的ライブラリを活用する方法について案内しています。
具体的には、11章にわたって、9つのPythonライブラリを取り上げています。
Pandas、Matplotlib、Seaborn、Bokeh、Altair、Plotly、GGPlot、GeoPandas、そしてVisPyです。
データビジュアライゼーションのユニークで実用的なガイドとして、あなたがキャリアで使うかもしれない多くのツールを紹介しています。