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

Matplotlibで透視投影と正投影の違いを可視化する方法

Matplotlibでは、3Dグラフの投影方式として「透視投影」と「正投影」を選択できます。両者を左右に並べて描画することで、その見た目の違いを直感的に把握できます。

透視投影と正投影の違い

  • 透視投影:人間の目やカメラと同じように、遠くにある部分ほど小さく描画されます。奥行き感のある自然な立体表現が得られます。
  • 正投影:平行投影とも呼ばれ、距離に関係なくすべての部分が同じスケールで描画されます。技術図面のような正確な形状比較に適しています。

実装の手順

  1. 図のサイズを設定し、サブプロット間および周囲の余白を調整します。
  2. plt.figure()で新しい図を作成します。
  3. fig.add_subplot()でサブプロットとしてAxesを追加します。
  4. 左側のax1にはset_proj_type('persp')で透視投影を設定し、タイトルを付けます。
  5. 右側のax2にはset_proj_type('ortho')で正投影を設定し、タイトルを付けます。
  6. plt.show()メソッドで図を表示します。

サンプルコード

import matplotlib.pyplot as plt

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

fig = plt.figure()

# 左側:透視投影
ax1 = fig.add_subplot(1, 2, 1, projection='3d')
ax1.set_proj_type('persp')
ax1.set_title('Perspective')

# 右側:正投影
ax2 = fig.add_subplot(1, 2, 2, projection='3d')
ax2.set_proj_type('ortho')
ax2.set_title('Orthographic')

plt.show()

出力結果

Matplotlibで透視投影と正投影の違いを可視化する方法

ポイント解説

set_proj_type()メソッドの引数には、透視投影なら'persp'、正投影なら'ortho'を指定します。3Dプロットのデフォルトは透視投影です。なお、透視投影の場合はfocal_length引数で焦点距離を調整でき、値を大きくすると正投影に近い見た目になります。データの全体構造を直感的に見せたい場合は透視投影、座標値を正確に読み取りたい場合は正投影を選ぶとよいでしょう。


  1. PythonとMatplotlibで3D散布図のアルファ値(透明度)を制御する方法

    PythonとMatplotlibを使って3D散布図のアルファ値(透明度)を制御するには、facecolorsとedgecolorsの値を適切に設定します。これにより、プロットした点の塗りつぶし色や縁取り色の透明度を細かく調整できます。実装手順図のサイズを設定し、サブプロット間および周囲の余白(パディング)を調整します。figure()メソッドを使って新しい図を作成するか、既存の図をアクティブにします。サブプロット構成の一部として、図に~.axes.Axesを追加します。NumPyを使ってx、y、zのデータポイントを生成します。scatter()メソッドでx、y、zの点を3D空間にプロットしま

  2. Matplotlibのplt.show()とcv2.imshow()の違いとは?画像表示の差をわかりやすく解説

    Pythonで画像を扱う際、MatplotlibとOpenCV(cv2)はどちらも画像を多次元のNumPy配列として読み込みます。しかし、両者には重要な違いがあります。Matplotlibのimreadメソッドは画像を赤(R)・緑(G)・青(B)の順(RGB順)のNumPy配列として読み込み、imshowで画面に表示します。一方、OpenCVのcv2.imreadも同様に多次元NumPy配列として画像を読み込みますが、チャンネルの並びが逆順(BGR順)になっている点が最大の特徴です。この違いを理解せずに使うと、cv2で読み込んだ画像をMatplotlibで表示した際に色が反転して見えるという現