Matplotlib ストリームプロット#

※記事内に商品プロモーションを含むことがあります。

公開日

Matplotlibでベクトル場を連続した線としてプロットするax.streamplotについて解説します。

なお、個々の位置におけるベクトルでプロットするには、ax.quiverを使用します。

ストリームプロットの例#

ax.streamplotを用いたベクトル場の例を以下に示します。 中心(x, y)=(0, 0)から外側に向かうベクトル場です。

import matplotlib.pyplot as plt
import numpy as np

x, y = np.meshgrid(np.linspace(-3, 3, 7), np.linspace(-3, 3, 7))
u, v = x, y

fig, ax = plt.subplots()
ax.streamplot(x, y, u, v)
plt.show()
../_images/1aed8b902f041f48ce8228531fdeb9a7721daf9a2aa58ef6e79c0f557a008511.png

ax.streamplotの主な引数を説明します。

ax.streamplot(x, y, u, v)
  • x: ベクトル場のx座標

  • y: ベクトル場のy座標

  • u: ベクトル場のx方向成分

  • v: ベクトル場のy方向成分

x, yは間隔が均等かつ昇順の1次元または2次元の配列となります。 2次元の配列にした場合、x, yは同じ要素数とする必要があります。 1次元の配列にした場合、自動的にnp.meshgrid(x, y)で2次元配列に変換されます。

u, vは2次元配列となり、(2次元配列にした)x, yと同じ要素数にする必要があります。

線の色#

ストリームプロットの線の色を指定する方法を解説します。

ax.streamplotcolor引数に、数値の2次元配列(uvと同じ要素数)で色を指定します。 以下の例では、ベクトルの長さvector_lengthcolor引数に与えています(ベクトルが大きいほど黄色に近い)。

なお、例ではplt.colorbarを使ってカラーバーも表示しています。 ax.streamplotの戻り値はStreamplotSetクラスのインスタンスです。 そのlines属性をplt.colorbarに与えます。

vector_length = np.sqrt(u**2 + v**2)

fig, ax = plt.subplots()
streamplot_set = ax.streamplot(x, y, u, v, color=vector_length)
plt.colorbar(streamplot_set.lines, ax=ax)
plt.show()
../_images/fc393f3ae7397e787aab00e4ad4940dc522d7f6ab5771e8c243c09c45a9539d4.png

カラーマップは以下のようにax.streamplotcmap引数で指定できます。 カラーマップの一覧についてはMatplotlibのカラーマップの記事を参照してください。

また、norm引数で色のレンジを指定できます。 matplotlib.colors.Normalizevmin, vmaxで最小値と最大値を指定し、norm引数に与えます。

import matplotlib

c_norm = matplotlib.colors.Normalize(vmin=-2, vmax=7)

fig, ax = plt.subplots()
streamplot_set = ax.streamplot(x, y, u, v, color=vector_length, cmap="Reds", norm=c_norm)
plt.colorbar(streamplot_set.lines, ax=ax)
plt.show()
../_images/ab711515394c8f3cb9c0dad2ccfdc05636149d66759c44b09da068d80058ce25.png

線の密度#

線の密度はax.streamplotdensity引数で指定できます。 値が大きいほど密度が高くなります(デフォルト値は1)。

fig, ax = plt.subplots()
ax.streamplot(x, y, u, v, density=0.5)
plt.show()
../_images/5fcdf6508a259acc9b83df9c51100a702c9890f3370233215c88584ee6985b81.png

線の表示設定#

ax.streamplotの以下のオプションで線の表示を変更できます。

  • arrowsize (float): 矢印の大きさ(デフォルト値:1

  • arrowstyle (str): 矢印のスタイル(デフォルト値:'-|>'

  • broken_streamlines (bool): Trueの場合、ある線が他の線に近づくと途切れます(デフォルト値:True)。

broken_streamlines=Falseとすると、以下のように線が途切れずに描画されます。

fig, ax = plt.subplots()
ax.streamplot(x, y, u, v, broken_streamlines=False)
plt.show()
../_images/0fddebdd0c8ae339bb2a3cb95570cb1f967a83db3eec5070bb62d83035d7ced7.png

参考サイト#