物理現象を可視化するときに、矢印の大きさや向きを用いて、ベクトルや場を可視化するときがあると思うのですが、そのような図もPlotly では、描くことができます!
この 3次元版として、Cone Plots というものもありますが、今回の記事では2次元版の Quiver Plots についてまとめていきます!
Quiver Plot とは?
Quiver Plot とは、ベクトル線を矢印として表示するプロットの一種です。 矢印の大きさや向きを用いて、ベクトル場を可視化することができます!
日本語としては、矢筒プロットともいうようです。(私は調べていて初めて知りました...)
Quiver Plot (基本編)
最低限設定が必要な要素は、次の4つです。
- x : 矢印の x座標 の 位置
- y : 矢印の y座標 の 位置
- u : 矢印の ベクトル x座標要素
- v : 矢印の ベクトル y座標要素
実際に書いてみると、このような図になります!!
create_quiver 関数
Figure Factory の create_quiver に x, y, u, v の4要素を設定することで描画をすることができます!
ff.create_quiver(x, y, u, v)
サンプルコード
上の図では、メッシュグリッドを用いて矢印の座標を設定しています。
この図を描くためのコードは以下の通りです。
import plotly.figure_factory as ff
import numpy as np
x,y = np.meshgrid(np.arange(-2, 2, 0.2), np.arange(-2, 0, 0.2))
u = np.sin(x)*y
v = np.cos(x)*y
fig = ff.create_quiver(x, y, u, v)
fig.show()
Quiver Plot (応用編) : 点も追加して描画
基本編では、紹介していなかった4要素以外の引数(オプション)の紹介と、ベクトル場の中心に点を描画をした応用編をまとめていきます!
ここで描画するのは下の図です!
scale
矢印の大きさを 設定 (デフォルトは 0.1)
arrow_scale
barbの長さにこの arrow_scale にかけて、矢じりの長さを決定する
barb とは? : (矢じりの) あご、かかりなどを意味する 英単語
line_width
矢印の線の太さ の設定
サンプルコード
基本編に引き続き、メッシュグリッドを用いて矢印の座標を設定しています。
中心となる点についても、散布図を描くための関数である Scatter で赤色の点で描画しています!
この図を描くためのコードは以下の通りです。
import plotly.figure_factory as ff
import plotly.graph_objects as go
import numpy as np
x,y = np.meshgrid(np.arange(-2, 2, 0.25),
np.arange(-2, 2, 0.25))
z = y*np.exp(-x**2 - y**2)
v, u = np.gradient(z, 0.2, 0.2)
fig = ff.create_quiver(x, y, u, v,
scale=0.25,
arrow_scale=0.4,
name='quiver',
line_width= 1.5
)
# 点の描画
fig.add_trace(go.Scatter(x=[0,0], y=[-0.75, 0.75],
mode='markers',
marker_size=12,
name='points'))
fig.show()
参考
今回取り上げた Quiver Plots に関するサンプルは、公式のドキュメントの例に加えて異なるバージョンを可視化してみました!
コメント