簡體   English   中英

matplotlib 3D plot,plot_surface black

[英]matplotlib 3D plot, plot_surface black

我有以下數據: https//www.dropbox.com/s/u7ee09chaixw5vb/draw?dl = 0

它是使用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()

,結果如下:

在matplotlib中繪制具有非常不相等形狀的表面

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM