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()

编辑/更新:我不确定我的问题是代码本身还是我理解 3Dplots 的方式,我应该使用 meshgrids 来获得我期望的情节吗?

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)以前版本中使用的。

编辑在 OPs 评论之后,似乎代码的结果与预期不符,而不是出现某种错误。以下代码是我认为的目的

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()

在上面的代码中,创建了一个二维网格(原始帖子中缺少),函数计算为这两个变量的函数并绘制为表面。x=y以前只是绘制了一条沿线运行的点。

于 2012-08-08T12:56:18.393 回答