はじめに
本記事ではmatplotlibのpatchesモジュールを使用して図上に矢印を表示する方法について解説します。特にFancyArrowPatchクラスとArrowクラスの使い方に焦点を当て、それぞれの特徴や実装方法を紹介します。
コード

解説
モジュールのインポートなど
バージョン
矢印の位置の設定
tailは矢印の尻で、headが頭となります。
プロットのデータ値を基準に矢印を表示
FancyArrowPatchでは、開始点と終了点を(x_tail, y_tail), (x_head, y_head)という形式で設定します。mutation_scaleパラメータを使うと、矢印先端の大きさを調整できます。
矢印をプロットに表示するには、.add_patch(arrow)メソッドを使用します。
右側の図(axs[1])では、プロットの表示範囲がx軸とy軸ともに0〜3に設定されているため、矢印が相対的に小さく表示されています。

プロットの表示範囲を基準に矢印を表示
FancyArrowPatchでtransform=axs[0].transAxesを指定すると、axs[0]の座標系における相対的な位置を基準として矢印を表示できます。
右の図(axs[1])ではプロットの表示範囲がx軸とy軸ともに0〜3に設定されていますが、座標変換によって相対的な表示を行っているため、矢印の大きさは変わりません。

Arrowによる矢印の表示
Arrowクラスの場合、第2引数は終了点の座標ではなく、x軸とy軸それぞれの開始点から終了点までの差分(変位量)を設定します。

まとめ
matplotlibのpatchesモジュールを使用することで、図上に様々なスタイルの矢印を表示できることを学びました。FancyArrowPatchはカスタマイズ性が高く曲線の矢印も作成でき、Arrowはシンプルな直線矢印に適しています。これらを活用することで、データの関係性や流れをより明確に示すことができます。
参考
Arrow guide — Matplotlib 3.1.2 documentation
matplotlib.patches.FancyArrowPatch — Matplotlib 3.1.2 documentation
コメント