Matplotlib 矢印ガイド

Beginner

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

はじめに

矢印は、多くの場合、グラフに注釈を付けるために使用されます。このチュートリアルでは、グラフ上のデータ制限が変更されたときに異なる動作をする矢印を描画する方法を示します。

VM のヒント

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

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

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

表示空間で固定された頭部形状、データ空間で固定されたアンカーポイント

これは、グラフに注釈を付ける際に、パンやスケール変更を行っても矢印の形状や位置が変化しない場合に便利です。

import matplotlib.pyplot as plt
import matplotlib.patches as mpatches

x_tail = 0.1
y_tail = 0.5
x_head = 0.9
y_head = 0.8
dx = x_head - x_tail
dy = y_head - y_tail

fig, axs = plt.subplots(nrows=2)
arrow = mpatches.FancyArrowPatch((x_tail, y_tail), (x_head, y_head),
                                 mutation_scale=100)
axs[0].add_patch(arrow)

arrow = mpatches.FancyArrowPatch((x_tail, y_tail), (x_head, y_head),
                                 mutation_scale=100)
axs[1].add_patch(arrow)
axs[1].set(xlim=(0, 2), ylim=(0, 2))

plt.show()

表示空間で固定された頭部形状とアンカーポイント

これは、グラフに注釈を付ける際に、パンやスケール変更を行っても矢印の形状や位置が変化しない場合に便利です。

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))

plt.show()

データ空間で固定された全体のパッチ

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))

plt.show()

まとめ

このチュートリアルでは、グラフ上のデータ制限が変更されたときに異なる動作をする矢印を描画する方法を示しました。ヘッドまたはアンカーポイントをデータ空間または表示空間で固定する必要があるかどうかに応じて、矢印を描画する 3 つのケースを扱いました。これらのケースは、グラフに注釈を付け、グラフがパンまたはスケール変更されても矢印が正しい位置に留まるようにするのに役立ちます。