简体   繁体   English

matplotlib 3D plot,plot_surface black

[英]matplotlib 3D plot, plot_surface black

I have the following data: https://www.dropbox.com/s/u7ee09chaixw5vb/draw?dl=0 我有以下数据: https//www.dropbox.com/s/u7ee09chaixw5vb/draw?dl = 0

it is saved using pickle in python3 and it is just a two dimensional python list, in the form of z=[[],[],[]...[]] 它是使用python3中的pickle保存的,它只是一个二维python列表,格式为z=[[],[],[]...[]]

and I use the following code to plot the 3D graph, but it only shows me black surface, why? 我使用下面的代码绘制3D图形,但它只显示黑色表面,为什么? xydict can be loaded from the file above: 可以从上面的文件加载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)

在此输入图像描述

There are a few problems with both your data and the arguments you used. 您的数据和您使用的参数都存在一些问题。 The shape of your surface is extremely unequal and you are requesting one rstride for every line. 你表面的形状是非常不平等的,你是一个请求rstride的每一行。 The result is that you only see the black from the strides. 结果是你只能看到步幅中的黑色。

The other problem is that you seem to have nan values in your data. 另一个问题是您的数据中似乎有nan值。 Should you limit the data to the valid values and pick better stride numbers you should obtain a far better plot. 如果您将数据限制为有效值并选择更好的stride数字,您应该获得更好的情节。 For instance this: 例如:

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

, results in this: ,结果如下:

在matplotlib中绘制具有非常不相等形状的表面

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM