この記事では、Plotlyで描ける3次元プロットの1つとして、「Streamtube Plot」の描き方をまとめていきます!
Streamtube Plot って何?という人へ簡単に説明も行っていきます!!
Streamtube Plot とは?
ベクトル場の流れ(stream)を可視化するための plot です。
設定する要素としては、6 つ。
- 座標を表す x, y, z
- ベクトル成分 u, v, w
この計 6つの同じ長さの配列を用いて描いていきます!
実際に描いてみると、下のような図になります!
この streamtube の開始位置は、ベクトル場の x-z平面からその最小となる y値が切り取られる形で設定されます!
独自に指定することもできますが、その際は starts.x
というようにstartsで設定する必要があります!
そのほかの設定としては、色・チューブの半径の設定についてです。
- 色 : (u, v, w) の ノルム により設定
- チューブの半径 : (u, v, w) のダイバージェンスにより設定
実際に描いてみよう!
上の図では、このようなコードで描いた streamtube plot を載せていました!
ここでは、値を少し変えながら streamtube plot をまとめていきます!
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Streamtube(x=[0, 0, 0], y=[0, 1, 2], z=[0, 0, 0],
u=[0, 0, 0], v=[1, 1, 1], w=[0, 0, 0]))
fig.show()
ベクトルv を変更 (チューブの半径を変更)
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Streamtube(x=[0, 0, 0], y=[0, 1, 2], z=[0, 0, 0],
u=[0, 0, 0], v=[1, 2, 1], w=[0, 0, 0]))
fig.show()
チューブの軸を 回転
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Streamtube(x=[0, 1, 5], y=[0, 0, 0], z=[0, 0, 0],
u=[1, 1, 1], v=[0, 1, 0], w=[0, 0, 0]))
fig.show()
チューブの長さ変更 + 90度回転
import plotly.graph_objects as go
fig = go.Figure()
fig.add_trace(go.Streamtube(x=[0, 1, 5], y=[0, 0, 0], z=[0, 0, 0],
u=[1, 1, 1], v=[0, 0, 0], w=[0, 0, 0]))
fig.show()
(応用編) より複雑なstreamtube plot
最後に Plotly のデータセットを用いて streamtube plotを図示していきます!
https://raw.githubusercontent.com/plotly/datasets/master/streamtube-wind.csv
ここでは、csv 形式で x, y, z, u, v, wがそれぞれ保存されているのでそれらを読み込み図示しています。
そのため、これら6要素を保存さえできれば図示することが可能なので、流体などを扱われている人がいれば活用できるのでは!と思います。
コメント