Python matplotlib 3D打印,打印曲面黑色

Python matplotlib 3D打印,打印曲面黑色,python,python-3.x,numpy,matplotlib,Python,Python 3.x,Numpy,Matplotlib,我有以下数据: 它是在python3中使用pickle保存的,它只是一个二维python列表,形式为z=[]、[]、[]、[]…[]] 我使用下面的代码来绘制3D图形,但它只显示黑色的表面,为什么xydict可以从上面的文件加载: from mpl_toolkits.mplot3d import Axes3D fig = plt.figure() ax = Axes3D(fig) X = np.arange(0, len(xydict)) Y = np

我有以下数据:

它是在python3中使用pickle保存的,它只是一个二维python列表,形式为
z=[]、[]、[]、[]…[]]

我使用下面的代码来绘制3D图形,但它只显示黑色的表面,为什么<代码>xydict可以从上面的文件加载:

    from mpl_toolkits.mplot3d import Axes3D

    fig = plt.figure()
    ax = Axes3D(fig)
    X = np.arange(0, len(xydict))
    Y = np.arange(0, len(xydict[0]))
    X, Y = np.meshgrid(X, Y)
    Z = np.array(xydict).T


    ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=plt.cm.hot)     
    # ax.contourf(X, Y, Z, zdir='z', offset=0, cmap=plt.cm.hot)
    ax.set_zlim(0,1)

    plt.savefig('plot3d_ex.png', dpi=480)

您的数据和使用的参数都有一些问题。曲面的形状极不均匀,您要求每行使用一个
rstride
。结果是,您只能从跨步中看到黑色

另一个问题是,您的数据中似乎有
nan
值。如果您将数据限制为有效值,并选择更好的
stride
数字,则应获得更好的绘图。例如:

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

with open('draw', 'rb') as pickle_file:
    xydict = pickle.load(pickle_file)

fig = plt.figure()
ax = Axes3D(fig)
X = np.arange(0, len(xydict))
Y = np.arange(0, len(xydict[0]))
X, Y = np.meshgrid(X, Y)
Z = np.array(xydict).T

ax.plot_surface(X[:,:-2], Y[:,:-2], Z[:,:-2], rstride=100, cstride=1, cmap=plt.cm.hot)     
# ax.contourf(X, Y, Z, zdir='z', offset=0, cmap=plt.cm.hot)
ax.set_zlim(0,1)
plt.show()
,结果如下:


如果只显示(而不是savefig),是否会出现问题?此外,如果尝试使用imshow打印,图片是否正确显示?您应该将您使用的matplotlib版本添加到您的问题中,它可能与您的问题相关。是的,imshow是正确的,当我使用plot_曲面处理简单函数(如sin(x))时,它也可以。非常感谢!你帮了我很多!