ノート
完全なサンプルコードをダウンロードするには、ここをクリックしてください
矢印ガイド#
プロットに矢印パッチを追加します。
矢印は、プロットに注釈を付けるためによく使用されます。このチュートリアルでは、プロットのデータ範囲が変更されたときに異なる動作をする矢印をプロットする方法を示します。一般に、プロット上の点は「データ空間」または「表示空間」のいずれかに固定できます。データ制限が変更されると、データ空間にプロットされた何かが移動します。例としては、散布図のポイントがあります。データ制限が変更されると、表示スペースにプロットされたものは静的なままになります。たとえば、図のタイトルや軸ラベルなどです。
矢印は、ヘッド (場合によってはテール) と、始点と終点の間に描かれたステム (以降「アンカー ポイント」と呼びます) で構成されます。ここでは、矢印をプロットするための 3 つの使用例を示します。これらは、ヘッド ポイントまたはアンカー ポイントをデータまたは表示スペースで固定する必要があるかどうかに応じて異なります。
頭の形状は表示スペースに固定、アンカーポイントはデータスペースに固定
表示スペースに固定された頭の形とアンカーポイント
パッチ全体をデータ スペースに固定
以下に、各ユースケースを順番に示します。
表示スペースに固定された頭の形状とデータスペースに固定されたアンカーポイント#
これは、プロットに注釈を付けていて、プロットをパンまたはスケーリングする場合に矢印の形や位置を変えたくない場合に便利です。
この場合、 を使用しますpatches.FancyArrowPatch
。
軸の範囲を変更すると、矢印の形状は同じままですが、アンカー ポイントが移動することに注意してください。
[(0.0, 2.0), (0.0, 2.0)]
表示スペースに固定された頭の形状とアンカーポイント#
これは、プロットに注釈を付けていて、プロットをパンまたはスケーリングしても矢印の形や位置を変えたくない場合に便利です。
この場合、 を使用し、パッチを追加する軸でpatches.FancyArrowPatch
あるキーワード引数を渡し
ます。transform=ax.transAxes
ax
軸の範囲が変更されても、矢印の形状と位置は同じままであることに注意してください。
fig, axs = plt.subplots(nrows=2)
arrow = mpatches.FancyArrowPatch((x_tail, y_tail), (x_head, y_head),
mutation_scale=100,
transform=axs[0].transAxes)
axs[0].add_patch(arrow)
arrow = mpatches.FancyArrowPatch((x_tail, y_tail), (x_head, y_head),
mutation_scale=100,
transform=axs[1].transAxes)
axs[1].add_patch(arrow)
axs[1].set(xlim=(0, 2), ylim=(0, 2))
[(0.0, 2.0), (0.0, 2.0)]
データ空間に固定された頭の形とアンカーポイント#
この場合patches.Arrow
、またはを使用しますpatches.FancyArrow
(後者はオレンジ色です)。
軸の範囲を変更すると、矢印の形と位置が変わることに注意してください。
FancyArrow
の API は比較的扱いにくく、特に
矢印の先端が矢印の始点から離れるlength_includes_head=True
ように渡す必要があります。これは(緑色)によって返される矢印クラスであるため、このリファレンスにのみ含まれています。(dx, dy)
Axes.arrow
fig, axs = plt.subplots(nrows=2)
arrow = mpatches.Arrow(x_tail, y_tail, dx, dy)
axs[0].add_patch(arrow)
arrow = mpatches.FancyArrow(x_tail, y_tail - .4, dx, dy,
width=.1, length_includes_head=True, color="C1")
axs[0].add_patch(arrow)
axs[0].arrow(x_tail + 1, y_tail - .4, dx, dy,
width=.1, length_includes_head=True, color="C2")
arrow = mpatches.Arrow(x_tail, y_tail, dx, dy)
axs[1].add_patch(arrow)
arrow = mpatches.FancyArrow(x_tail, y_tail - .4, dx, dy,
width=.1, length_includes_head=True, color="C1")
axs[1].add_patch(arrow)
axs[1].arrow(x_tail + 1, y_tail - .4, dx, dy,
width=.1, length_includes_head=True, color="C2")
axs[1].set(xlim=(0, 2), ylim=(0, 2))
[(0.0, 2.0), (0.0, 2.0)]
plt.show()
スクリプトの合計実行時間: ( 0 分 1.191 秒)