2

X、Y、Z 軸でこれらの 100 点の 3D プロットを作成したいと考えています。3 つの軸すべてに必要なリストを生成しました。3D で一連の点をプロットするには、これで十分だと思いました。しかし、私は出力を理解していません。この点に関して、あらゆる種類の助けに感謝します。

################################################################
# problem : f(x) = (e**(-(y**2)))*cos(3*x)+(e**(x**2))*cos(3*y)
################################################################

from mpl_toolkits.mplot3d import Axes3D
import math
import matplotlib
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax=Axes3D(fig)
x = np.arange(-5,5,1)
y = np.arange(-5,5,1)
X = []
Y = []
Z=[]
for i in range(len(x)):
        for j in range(len(y)):
            z=(np.exp(-(y[j]**2))*np.cos(3*x[i]))+(np.exp(x[i]**2)*np.cos(3*y[j]))
        Z.append(z)
        X.append(x[i])
        Y.append(y[j])
ax.plot(X,Y,Z,'o')
plt.show()

編集/更新: 私の問題がコード自体にあるのか、それとも 3Dplot を理解する方法にあるのかわかりません。メッシュグリッドを使用して期待するプロットを取得する必要がありますか?

4

1 に答える 1

4

どのバージョンの matplotlib を使用していますか? ドキュメントには、matplotlib バージョン 1.0.0 以降では、次のように 3D 軸を作成する必要があると記載されています。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ax = Axes3D(fig)以前のバージョンで使用されていたものではありません。

編集OPのコメントに続いて、何らかのエラーが発生するのではなく、コードの結果が期待どおりではないようです。次のコードは、私が意図していると推測するものです

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

x, y = np.meshgrid(np.linspace(-5., 5., 100), np.linspace(-5., 5., 100))

def zfunc(x, y):
    return np.exp(-(y**2)) * np.cos(3.*x) + np.exp(x**2) * np.cos(3.*y)

z = zfunc(x, y)

ax.plot_surface(x, y, z)

plt.show()

上記のコードでは、2 次元メッシュが作成され (元の投稿にはありません)、関数はこれら 2 つの変数の関数として計算され、サーフェスとしてプロットされます。以前は、点の線だけx=yがプロットされていました。

于 2012-08-08T12:56:18.393 に答える