HOWTO · Seaborn
Seaborn プロットに軸ラベルを追加する
Axes メソッドまたは Matplotlib pyplot を使用して Seaborn プロットに x 軸と y 軸のラベルを設定し、その外観をカスタマイズする方法を説明します。
このページの内容
Seabornのプロットに軸ラベルを追加または変更するには、プロット関数が返すMatplotlibのAxesオブジェクトに対してset_xlabel()とset_ylabel()を呼び出します。Seabornはxとyに割り当てた変数からデフォルトのラベルを設定することがよくありますが、具体的なラベルはプロットの種類や入力によって異なります。読者に分かりやすい名前を付けたい場合は、ラベルを明示的に指定してください。
Axes.set_xlabel()とAxes.set_ylabel()を使う
この方法ではSeabornが返す特定のAxesを対象にするため、1つの図に複数のプロットがある場合も分かりやすく指定できます。次の例ではメモリ内に小さなデータセットを作り、ラベルを設定した後にその値を表示します。
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import seaborn as sns
days = ["Mon", "Tue", "Wed"]
orders = [12, 18, 15]
ax = sns.lineplot(x=days, y=orders, marker="o")
ax.set_xlabel("Day", fontsize=12)
ax.set_ylabel("Orders", fontsize=12)
print(ax.get_xlabel(), "|", ax.get_ylabel())
plt.close()
ラベルの見た目を調整するには、fontsizeやcolorなどのテキストプロパティが便利です。たとえば、どちらのメソッドにもcolor="navy"を渡せます。これらの呼び出しで変わるのは軸ラベルです。タイトルは別に設定するため、必要に応じてax.set_title("Orders by day")を使います。目盛りラベルが軸に詰まっている場合は、ax.tick_params(axis="x", labelrotation=45)で回転させるか、プロットを作成する前にfig, ax = plt.subplots(figsize=(8, 4))で図のスペースを広げてください。
Axes.set()で両方のラベルを設定する
同じAxesオブジェクトのx軸とy軸のラベルを設定する場合は、set()を使えます。xlabelとylabelのキーワード引数で両方をまとめて変更できます。対象を明確にするため、返されたAxesは変数に保持してください。
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import seaborn as sns
months = ["Jan", "Feb", "Mar"]
visitors = [120, 145, 138]
ax = sns.lineplot(x=months, y=visitors, marker="o")
ax.set(xlabel="Month", ylabel="Visitors")
print(ax.get_xlabel(), "|", ax.get_ylabel())
plt.close()
matplotlib.pyplot.xlabel()とmatplotlib.pyplot.ylabel()でラベルを設定する
matplotlib.pyplot.xlabel()とmatplotlib.pyplot.ylabel()は、現在のAxesを1つだけ扱う簡単なスクリプトで便利な関数です。これらはpyplotの現在のAxesに作用するため、図に複数のプロットがある場合は、先に対象のAxesを選択してください。次の例では、ラベルを設定する前にSeabornのAxesを現在のAxesにします。
import matplotlib
matplotlib.use("Agg")
import matplotlib.pyplot as plt
import seaborn as sns
products = ["A", "B", "C"]
sales = [8, 13, 10]
ax = sns.barplot(x=products, y=sales)
plt.sca(ax)
plt.xlabel("Product", fontsize=12)
plt.ylabel("Sales", fontsize=12)
print(ax.get_xlabel(), "|", ax.get_ylabel())
plt.close()
1つのプロットであれば、どちらのAPIでもラベルを設定できます。プロットオブジェクトをすでに取得している場合や、複数のAxesを扱う場合は、Axesメソッドを使うとよいでしょう。周囲のコードがpyplotの現在のAxesという仕組みに合う場合は、pyplotを使ってください。グリッド線を追加するには、対象のAxesに対してax.grid(True)を呼び出します。