Python
 Computer >> コンピューター >  >> プログラミング >> Python

Matplotlibで3Dプロットのアスペクト比を設定する方法

Matplotlibで3Dプロットのアスペクト比を設定するには、set_aspect()メソッドを使用します。ここでは、曲面プロット(サーフェスプロット)を例に、具体的な手順とサンプルコードを解説します。

3Dプロットのアスペクト比を設定する手順

以下の手順に従って実装します。

  • figure()メソッドで新しい図を作成するか、既存の図をアクティブにします。
  • projection='3d' を指定して現在のAxes(座標軸)を取得します。存在しない場合は自動的に作成されます。
  • numpyを使ってデータ点 R、Y、z を生成します。
  • R、Y、zをもとにサーフェスプロット(曲面図)を作成します。
  • set_aspect('auto') でアスペクト比を設定します。
  • savefig() メソッドで図をファイルに保存します。

サンプルコード

from matplotlib import pyplot as plt
from matplotlib import cm
import numpy as np

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

fig = plt.figure()
ax = fig.gca(projection='3d')

# メッシュグリッドの生成
R, Y = np.meshgrid(np.arange(0, 100, 1), np.arange(0, 60, 1))
z = 0.1 * np.abs(np.sin(R / 40) * np.sin(Y / 6))

# サーフェスプロットの描画
ax.plot_surface(R, Y, z, cmap=cm.rainbow, linewidth=0)

# アスペクト比の設定
ax.set_aspect('auto')

# 視点角度の設定
ax.azim = -160
ax.elev = 30

fig.savefig('data.png')
plt.show()

実行結果

上記のコードを実行すると、虹色のカラーマップで着色された3D曲面が表示され、その画像が「data.png」として保存されます。azim(方位角)と elev(仰角)により、見やすい視点から描画されています。

set_aspect() のオプションについて

set_aspect() に指定できる主な値は以下の通りです。

  • 'auto':各軸のスケールを独立して調整し、描画領域に収まるように自動設定します(デフォルトの挙動に近い)。
  • 'equal':すべての軸のスケールを揃え、物理的な距離感を正確に表現します。立方体などの形状を正しく見せたい場合に有効です。
  • 数値(例:0.5):y軸に対するx軸の比率を直接指定できます。

なお、Matplotlib 3.3以降では fig.gca(projection='3d') の代わりに fig.add_subplot(projection='3d') を使う方法が推奨されています。将来的な非推奨化に備えて、新規コードでは後者を採用するとよいでしょう。

  1. Matplotlibでプロット上のテキストをアニメーション表示する方法

    Matplotlibでは、FuncAnimationクラスを活用することで、プロット上に配置したテキストを簡単にアニメーション化できます。例えば、文字が一文字ずつタイプされていくような演出も実装可能です。 実装の手順 figureのサイズを設定し、サブプロット間・周囲の余白(パディング)を自動調整します。 X軸とY軸の表示範囲(リミット)を指定します。 表示したい文章を格納するstring変数を初期化します。 text()メソッドを使って、プロット上にテキストを配置します。 FuncAnimation()を用いてテキストをアニメーション化し、フレームごとに表示する文字列を更新します。 axi

  2. Matplotlibでプロット上のグリッドサイズを定義する方法

    Matplotlib を使ってプロット上にグリッド(格子線)を表示し、その間隔(サイズ)を自由に定義する方法を紹介します。基本的な流れは以下の手順のとおりです。 グリッドサイズを定義する手順 figure() メソッドを使って、新しい図(Figure)を作成するか、既存の図をアクティブにします。 サブプロット配置の一部として、add_subplot() で図に Axes(座標軸)を追加します。 入力リストを渡して曲線をプロットします。 margins() メソッドで x 軸・y 軸のマージンを 0 に設定します。 X 軸のグリッド位置を指定するには、set_ticks() に目盛りの座標