1. ホーム
  2. python

[解決済み] matplotlib でのサーフェスプロット

2022-03-04 11:33:20

質問

3次元空間の点の集合を表す3タプルのリストがある。これらの点をすべてカバーするサーフェスを作成したい。

plot_surface 関数で mplot3d パッケージは引数としてX,Y,Zを2次元配列として要求します。これは plot_surface をプロットするのに適した関数と、データを必要な形式に変換する方法を教えてください。

data = [(x1,y1,z1),(x2,y2,z2),.....,(xn,yn,zn)]

解決方法は?

サーフェスの場合、3タプルのリストとは少し異なり、2次元配列でドメイン用のグリッドを渡す必要があります。

もし、3次元の点のリストしかない場合は、何らかの関数ではなく f(x, y) -> z なぜなら、その3次元点群をサーフェスに三角測量する方法は複数存在するからです。

ここでは、滑らかなサーフェイスの例を示します。

import numpy as np
from mpl_toolkits.mplot3d import Axes3D  
# Axes3D import has side effects, it enables using projection='3d' in add_subplot
import matplotlib.pyplot as plt
import random

def fun(x, y):
    return x**2 + y

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = y = np.arange(-3.0, 3.0, 0.05)
X, Y = np.meshgrid(x, y)
zs = np.array(fun(np.ravel(X), np.ravel(Y)))
Z = zs.reshape(X.shape)

ax.plot_surface(X, Y, Z)

ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

plt.show()

<イグ