はじめに
このチュートリアルでは、Matplotlib で等高線ラベルを作成する方法を学びます。等高線ラベルは、等高線プロット内の等高線にラベルを付けるために使用されます。このチュートリアルでは、カスタム等高線ラベルを作成するためのいくつかの高度な技術について説明します。
VM のヒント
VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使って練習しましょう。
Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。
学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。
曲面を定義する
まず、numpy と matplotlib を使って曲面を定義します。これにより、操作するデータセットが得られます。
import matplotlib.pyplot as plt
import numpy as np
delta = 0.025
x = np.arange(-3.0, 3.0, delta)
y = np.arange(-2.0, 2.0, delta)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) * 2
カスタムレベルフォーマッタを使って等高線ラベルを作成する
次に、カスタムレベルフォーマッタを使って等高線ラベルを作成します。これにより、特定の方法でラベルをフォーマットすることができます。この場合、末尾のゼロを削除してパーセント記号を追加します。
def fmt(x):
s = f"{x:.1f}"
if s.endswith("0"):
s = f"{x:.0f}"
return rf"{s} \%" if plt.rcParams["text.usetex"] else f"{s} %"
fig, ax = plt.subplots()
CS = ax.contour(X, Y, Z)
ax.clabel(CS, CS.levels, inline=True, fmt=fmt, fontsize=10)
辞書を使って任意の文字列を使って等高線にラベルを付ける
辞書を使って、任意の文字列を使って等高線にラベルを付けることもできます。これにより、カスタムラベルで等高線にラベルを付けることができます。この例では、文字列をリストとして使って等高線にラベルを付けます。
fig1, ax1 = plt.subplots()
CS1 = ax1.contour(X, Y, Z)
fmt = {}
strs = ['first','second', 'third', 'fourth', 'fifth','sixth','seventh']
for l, s in zip(CS1.levels, strs):
fmt[l] = s
ax1.clabel(CS1, CS1.levels[::2], inline=True, fmt=fmt, fontsize=10)
フォーマッタを使用する
等高線ラベルをフォーマットするために、フォーマッタを使用することもできます。これにより、特定の方法でラベルをフォーマットすることができます。この例では、LogFormatterMathtext を使用してラベルをフォーマットします。
fig2, ax2 = plt.subplots()
CS2 = ax2.contour(X, Y, 100**Z, locator=plt.LogLocator())
fmt = ticker.LogFormatterMathtext()
fmt.create_dummy_axis()
ax2.clabel(CS2, CS2.levels, fmt=fmt)
ax2.set_title("$100^Z$")
plt.show()
まとめ
このチュートリアルでは、Matplotlib で等高線ラベルを作成する方法を学びました。カスタムレベルフォーマッタ、任意の文字列を使って等高線にラベルを付ける、および等高線ラベルをフォーマットするためのフォーマッタを使用するなど、カスタム等高線ラベルを作成するための高度な技術について説明しました。これらの技術は、情報が豊富で美しいビジュアライゼーションを作成する際に役立つ場合があります。