Matplotlib的Axes3D绘图不直观吗?

时间:2012-08-08 12:50:01

标签: python plot matplotlib

我想在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来获得我期望的情节吗?

1 个答案:

答案 0 :(得分:4)

你有哪个版本的matplotlib? documentation表示对于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()

在上面的代码中,创建了一个二维网格(从原始帖子中丢失),并且该函数被计算为这两个变量的函数并绘制为表面。以前只有x=y的一系列点正在策划。

相关问题