Python で Matplotlib を使って streamplot を作成する

MatplotlibMatplotlibBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

このチュートリアルでは、Python の Matplotlib を使って streamplot を作成するプロセスを案内します。Streamplot は、一連の流線を表示する 2D ベクトルフィールドです。流体の流れやその他のベクトルフィールドを可視化するために使用されます。このチュートリアルでは、密度、色、線の太さを変化させながら、流線の始点を制御して streamplot を作成する方法を紹介します。

VM のヒント

VM の起動が完了したら、左上隅をクリックして ノートブック タブに切り替え、Jupyter Notebook を使って練習しましょう。

Jupyter Notebook の読み込みには数秒かかる場合があります。Jupyter Notebook の制限により、操作の検証は自動化できません。

学習中に問題がある場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

ライブラリのインポート

始める前に、必要なライブラリをインポートする必要があります。このチュートリアルでは、Numpy と Matplotlib ライブラリを使用します。Numpy は数値演算に、Matplotlib はデータ可視化に使用されます。

import matplotlib.pyplot as plt
import numpy as np

データの作成

Numpy ライブラリを使って、streamplot 用のデータを作成します。この例では、両方向に 100 点のメッシュグリッドを作成し、ベクトルフィールドの U と V の成分を計算します。

w = 3
Y, X = np.mgrid[-w:w:100j, -w:w:100j]
U = -1 - X**2 + Y
V = 1 + X - Y**2
speed = np.sqrt(U**2 + V**2)

密度の変化

このステップでは、密度を変化させた streamplot を作成します。density パラメータは、描画する流線の数を制御します。値が高いほど、流線が多くなります。

plt.streamplot(X, Y, U, V, density=[0.5, 1])
plt.title('Varying Density')
plt.show()

色の変化

このステップでは、色を変化させた streamplot を作成します。color パラメータは、ベクトルフィールドの大きさを表す 2 次元配列をとります。ここでは、ベクトルフィールドの U 成分を色として使用しています。

strm = plt.streamplot(X, Y, U, V, color=U, linewidth=2, cmap='autumn')
plt.colorbar(strm.lines)
plt.title('Varying Color')
plt.show()

線幅の変化

このステップでは、線幅を変化させた streamplot を作成します。linewidth パラメータは、流線の幅を制御します。ここでは、先ほど計算した speed 配列を使って線幅を変化させています。

lw = 5*speed / speed.max()
plt.streamplot(X, Y, U, V, density=0.6, color='k', linewidth=lw)
plt.title('Varying Line Width')
plt.show()

始点の制御

このステップでは、始点を制御した streamplot を作成します。start_points パラメータは、流線の始点を表す 2 次元配列をとります。

seed_points = np.array([[-2, -1, 0, 1, 2, -1], [-2, -1, 0, 1, 2, 2]])

strm = plt.streamplot(X, Y, U, V, color=U, linewidth=2,
                      cmap='autumn', start_points=seed_points.T)
plt.colorbar(strm.lines)
plt.title('Controlling Starting Points')
plt.plot(seed_points[0], seed_points[1], 'bo')
plt.xlim(-w, w)
plt.ylim(-w, w)
plt.show()

マスキング付きの streamplot

このステップでは、マスキング付きの streamplot を作成します。マスクを作成し、ベクトルフィールドの U 成分に適用します。マスクされた領域は、流線によってスキップされます。

mask = np.zeros(U.shape, dtype=bool)
mask[40:60, 40:60] = True
U[:20, :20] = np.nan
U = np.ma.array(U, mask=mask)

plt.streamplot(X, Y, U, V, color='r')
plt.title('Streamplot with Masking')
plt.imshow(~mask, extent=(-w, w, -w, w), alpha=0.5, cmap='gray', aspect='auto')
plt.gca().set_aspect('equal')
plt.show()

途切れない流線

このステップでは、途切れない流線を持つ streamplot を作成します。broken_streamlines パラメータは、単一のグリッドセル内の線の数の制限を超えた場合に流線を途切るかどうかを制御します。

plt.streamplot(X, Y, U, V, broken_streamlines=False)
plt.title('Streamplot with Unbroken Streamlines')
plt.show()

まとめ

このチュートリアルでは、Python の Matplotlib を使って streamplot を作成する方法を学びました。streamplot 関数のさまざまなパラメータ、密度、色、線幅の変化についても説明しました。また、流線の始点を制御し、マスクを適用し、途切れない流線を描画する方法についても学びました。