Python

Matplotlibのquiverで描くベクトル場入門!初心者向け完全ガイド

(最終更新月: 2024年11月)

✔こんな方におすすめの記事です

「Matplotlibでベクトル場を描きたい」
「quiverの使い方がわからない」
「ベクトル場をプログラムで可視化したい」

✔当記事を通じて得られること

  • Matplotlibのquiverの基本的な使い方
  • ベクトル場の描画方法とカスタマイズ
  • 実践的なベクトル場の可視化例

当記事では、Matplotlibのquiver関数の基礎から応用まで、実例を交えて詳しく解説していきます。
ぜひ最後までご覧ください。

quiver関数の基本

ここではMatplotlibのquiver関数の基本的な使い方について説明します。
ベクトル場を描画するための第一歩として、まずは基本を理解することが重要です。

  • quiver関数の概要と特徴
  • 基本的な使い方
  • パラメータの説明

quiver関数とは

quiver関数は、Matplotlibでベクトル場を描画するための関数です。

2次元平面上の各点に矢印を描くことで、風の流れや力の場などを表現できます。

以下は最も基本的なquiver関数の使用例です。

import numpy as np
import matplotlib.pyplot as plt

# グリッドの作成
x = np.linspace(-2, 2, 20)
y = np.linspace(-2, 2, 20)
X, Y = np.meshgrid(x, y)

# ベクトル成分の計算
U = -Y
V = X

# ベクトル場の描画
plt.quiver(X, Y, U, V)
plt.axis('equal')
plt.show()

基本的なパラメータ

quiver関数には多くの重要なパラメータが存在します。

これらのパラメータを適切に設定することで、見やすいベクトル場を作成できるのです。

主なパラメータは以下のとおりです。

  • X, Y: ベクトルの始点の座標
  • U, V: ベクトルのx成分とy成分
  • scale: 矢印の大きさのスケール
  • width: 矢印の太さ
  • color: 矢印の色

グリッドの作成方法

ベクトル場を描くには、まずグリッドを作成する必要があります。

np.meshgrid関数を使用することで、簡単に座標格子を生成できます。

import numpy as np

# 1次元の座標軸を作成
x = np.linspace(-5, 5, 10)
y = np.linspace(-5, 5, 10)

# 2次元グリッドを作成
X, Y = np.meshgrid(x, y)

ベクトル場の描画カスタマイズ

ベクトル場をより見やすく、美しく描画するためのカスタマイズ方法を解説します。
適切なカスタマイズにより、データの視認性が大きく向上します。

  • 色の設定
  • 矢印のスタイル調整
  • スケールの調整

色の設定方法

ベクトル場の色を設定することで、データの特徴をより明確に表現できます。

色は単色だけでなく、ベクトルの大きさに応じて変化させることも可能です。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-2, 2, 20)
y = np.linspace(-2, 2, 20)
X, Y = np.meshgrid(x, y)
U = -Y
V = X

# ベクトルの大きさを計算
magnitude = np.sqrt(U**2 + V**2)

# カラーマップを使用してベクトル場を描画
plt.quiver(X, Y, U, V, magnitude, cmap='viridis')
plt.colorbar()
plt.show()

矢印のスタイル調整

矢印のスタイルを調整することで、より見やすいベクトル場を作成できます。

width、headwidth、headlengthなどのパラメータを使って、矢印の形状を細かく制御できるのです。

plt.quiver(X, Y, U, V,
           width=0.005,      # 矢印の太さ
           headwidth=5,      # 矢印の頭の幅
           headlength=7,     # 矢印の頭の長さ
           headaxislength=7) # 矢印の頭の軸の長さ

スケールの調整

ベクトルの大きさを適切に調整することは、視認性の向上に重要です。

scale、scaleunits、unitsパラメータを使用して、ベクトルのスケールを制御します。

plt.quiver(X, Y, U, V,
           scale=50,        # スケールファクター
           scale_units='xy', # スケールの単位
           units='xy')      # 座標系の単位

実践的なベクトル場の例

ここでは実際の物理現象を例に、ベクトル場の描画方法を説明します。
具体的な例を通じて、quiver関数の実践的な使い方を理解しましょう。

  • 電場の可視化
  • 流体の流れ
  • 磁場の表現

電場の可視化例

点電荷による電場を可視化する例を示します。

電場の強さは距離の2乗に反比例するという物理法則に従って描画します。

import numpy as np
import matplotlib.pyplot as plt

# グリッドの作成
x = np.linspace(-5, 5, 20)
y = np.linspace(-5, 5, 20)
X, Y = np.meshgrid(x, y)

# 点電荷からの距離を計算
R = np.sqrt(X**2 + Y**2)

# 電場のベクトル成分を計算
E_x = X / (R**3)
E_y = Y / (R**3)

# 原点付近での発散を防ぐ
mask = R < 0.5
E_x[mask] = 0
E_y[mask] = 0

plt.quiver(X, Y, E_x, E_y, scale=50)
plt.title('点電荷による電場')
plt.axis('equal')
plt.show()

流体の流れの表現

渦を含む流体の流れを表現する例を示します。

複数の渦が相互作用する様子を可視化できます。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-5, 5, 30)
y = np.linspace(-5, 5, 30)
X, Y = np.meshgrid(x, y)

# 渦の中心
x1, y1 = -2, 0
x2, y2 = 2, 0

# 各渦からの距離
R1 = np.sqrt((X-x1)**2 + (Y-y1)**2)
R2 = np.sqrt((X-x2)**2 + (Y-y2)**2)

# 速度場の計算
U = -(Y-y1)/R1**2 + (Y-y2)/R2**2
V = (X-x1)/R1**2 - (X-x2)/R2**2

plt.quiver(X, Y, U, V, np.sqrt(U**2 + V**2),
          cmap='viridis',
          scale=50)
plt.colorbar(label='速度の大きさ')
plt.title('二重渦の流れ場')
plt.axis('equal')
plt.show()

磁場の表現

永久磁石周りの磁場を表現する例を示します。

磁力線の特徴的なパターンを可視化できます。

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-5, 5, 25)
y = np.linspace(-5, 5, 25)
X, Y = np.meshgrid(x, y)

# N極とS極の位置
x_n, y_n = -1, 0
x_s, y_s = 1, 0

# 各極からの距離
R_n = np.sqrt((X-x_n)**2 + (Y-y_n)**2)
R_s = np.sqrt((X-x_s)**2 + (Y-y_s)**2)

# 磁場の計算
B_x = (X-x_n)/R_n**3 - (X-x_s)/R_s**3
B_y = (Y-y_n)/R_n**3 - (Y-y_s)/R_s**3

# 磁場の大きさで正規化
B_mag = np.sqrt(B_x**2 + B_y**2)
B_x = B_x/B_mag
B_y = B_y/B_mag

plt.quiver(X, Y, B_x, B_y,
          scale=35,
          width=0.008,
          color='b')
plt.title('永久磁石の磁場')
plt.axis('equal')
plt.show()

まとめ

当記事では、Matplotlibのquiver関数について学習してきました。

  • quiver関数の基本的な使い方とパラメータの設定方法
  • ベクトル場の視覚的な表現方法とカスタマイズ
  • 実践的な物理現象の可視化例

これらの知識を活用することで、自分の目的に合わせたベクトル場の可視化が可能になります。

まずは基本的な例から始めて、徐々にパラメータを調整しながら、理想的な可視化を目指しましょう。

実際のデータを使って、独自のベクトル場を作成してみてください。