Plotly:ベクトルと場の可視化 (Quiver Plots)

plotly使い方

 物理現象を可視化するときに、矢印の大きさや向きを用いて、ベクトルや場を可視化するときがあると思うのですが、そのような図も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 に関するサンプルは、公式のドキュメントの例に加えて異なるバージョンを可視化してみました!

Quiver
Detailed examples of Quiver Plots including changing color, size, log axes, and more in Python.

コメント

タイトルとURLをコピーしました