Matplotlib の描画順序の調整

Beginner

This tutorial is from open-source community. Access the source code

はじめに

このチュートリアルでは、Matplotlib におけるアーティストの描画順序と、zorder 属性を使って順序を調整する方法について学びます。また、個々のアーティストの順序を変更する方法と、異なる種類のアーティストに対する zorder のデフォルト値についても探ります。

VM のヒント

VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替えて、Jupyter Notebook を使って練習しましょう。

時々、Jupyter Notebook が読み込み終了するまで数秒待つ必要がある場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

zorder を理解する

Matplotlib における zorder 属性は、浮動小数点数であり、アーティストの描画順序を決定します。zorder が高いアーティストは、zorder が低いアーティストの上に描画されます。zorder のデフォルト値は、アーティストの種類によって異なります。たとえば、画像はデフォルトの zorder が 0 であり、パッチはデフォルトの zorder が 1 です。

zorder の変更

アーティストの描画順序を変更するには、アーティストを作成する際に zorder パラメータを使用して、その zorder 属性を明示的に設定することができます。たとえば、散布図で点を線の上に移動させるには、点の zorder を線の zorder よりも高い値に設定します。

import matplotlib.pyplot as plt
import numpy as np

r = np.linspace(0.3, 1, 30)
theta = np.linspace(0, 4*np.pi, 30)
x = r * np.sin(theta)
y = r * np.cos(theta)

fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(6, 3.2))

ax1.plot(x, y, 'C3', lw=3)
ax1.scatter(x, y, s=120)
ax1.set_title('Lines on top of dots')

ax2.plot(x, y, 'C3', lw=3)
ax2.scatter(x, y, s=120, zorder=2.5)  ## move dots on top of line
ax2.set_title('Dots on top of lines')

plt.tight_layout()
plt.show()

目盛りとグリッド線の zorder の設定

目盛りとグリッド線の zorder を設定するには、set_axisbelow() メソッドまたは axes.axisbelow パラメータを使用します。

ax = plt.axes()
ax.plot([1, 2, 3], [2, 4, 3])
ax.set_axisbelow(True)
ax.yaxis.grid(color='gray', linestyle='dashed')

要素のカスタム順序

要素の zorder をカスタム順序で設定することもできます。たとえば、凡例の zorder を 2 本の線の間に設定することができます。

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 7.5, 100)
plt.rcParams['lines.linewidth'] = 5
plt.figure()
plt.plot(x, np.sin(x), label='zorder=2', zorder=2)  ## bottom
plt.plot(x, np.sin(x+0.5), label='zorder=3',  zorder=3)
plt.axhline(0, label='zorder=2.5', color='lightgrey', zorder=2.5)
plt.title('Custom order of elements')
l = plt.legend(loc='upper right')
l.set_zorder(2.5)  ## legend between blue and orange line
plt.show()

まとめ

このチュートリアルでは、Matplotlib における zorder 属性と、アーティストの描画順序を変更する方法について学びました。また、目盛りとグリッド線の zorder を設定する方法と、要素のカスタム順序を作成する方法についても検討しました。重なり合う要素を持つ複雑なビジュアライゼーションを作成する際には、zorder を理解することが不可欠です。