5.31.2022

matplotlibのquiverとquiverkeyについて

図に矢印(メジャーだとベクトル場とか、マイナーなとこでは波数空間のスピンなど)を描きたいことは多い。

その矢印情報を配列に入れて引数で渡せば描画してくれるのがmatplotlibのquiver、凡例を示してくれるのがquiverkey。

これは便利なところもあるけど使い方がわかりにくい上にすぐ忘れるのでメモする。

基本的に情報は公式サイトから仕入れた。公式サイトによると基本的なのは以下15個。これに加えてlinewidthとかも使える(linewidthは矢印の縁取りの指定なので注意)。

  • X, Y
  • U, V
  • C
  • units {'width', 'height', 'dots', 'inches', 'x', 'y', 'xy'}, default: 'width'
  • angles {'uv', 'xy'} or array-like, default: 'uv'
  • scale
  • scale_units {'width', 'height', 'dots', 'inches', 'x', 'y', 'xy'}
  • width
  • headwidth, as multiple of shaft width.
  • headlength, as multiple of shaft width.
  • headaxislength, at shaft intersection.
  • minshaft
  • minlength
  • pivot {'tail', 'mid', 'middle', 'tip'}, default: 'tail'
  • color

quiverの引数には注意点が多い。2個はまったのを書く。

(1) unitsは長さについての引数ではないその他(太さや頭(head)の調整)に使われる。

公式説明には
The arrow dimensions (except for length) are measured in multiples of this unit.
とある。

(2) 矢印の向きをxy平面のスケールに合わせたいとき、scale_units='xy'とする

xy平面に合わせるなら'xy'とする。

その上ややこしいのはangles。デフォルトはxy平面の図に関係なくU,Vで決まる方向になる'uv'。

例えば45°方向を向くようにU, Vで指定(1と1とか)すると、デフォルト'uv'のままだとxとy軸で表示スケール比(アスペクト比と言うと良いか)が違ってもとにかく表示上は45°を向く。

でもxy平面に応じた矢印の向きにするには(x, y軸のスケールに合わせたいなら)、angles='xy'で明示する必要がある。('uv'を指定する場合があるのか疑問)

公式説明にあるように、x軸とy軸で同じ単位なら

To plot vectors in the x-y plane, with u and v having the same units as x and y, use angles='xy', scale_units='xy', scale=1.

とすると良さそう。

あるいは矢印の向きを角度指定するならanglesに角度を指定した配列を与えても良いみたい。

(quiverkeyについては後で書く)