matplotlib三维绘图,绘制曲面b

2024-10-03 21:31:03 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我用下面的代码来绘制三维图形,但它只显示黑色的表面,为什么?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)

enter image description here


Tags: 数据httpslenwwwnpfigcmplt
1条回答
网友
1楼 · 发布于 2024-10-03 21:31:03

你的数据和你使用的参数都有一些问题。你的曲面形状极不相等,你要求每一行都有一个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()

,结果如下:

{a1}

相关问题 更多 >