首页 > 解决方案 > Matplotlib - 指定 cmap 颜色时 3D 曲面图消失

问题描述

我正在编写一个脚本,该脚本从一组不是网格的初始 x/y 值生成 3D 图。该脚本运行良好并将数据转换为网格并将其绘制得很好,但是当我指定 cmap 颜色时,绘图消失了。为什么会发生这种情况?

代码:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
x = []
y = []
rlim = -4
llim = 4
increment = np.absolute((llim-rlim)*5)
linespace = np.array(np.linspace(rlim,llim,increment, endpoint = False))

for val in linespace:
    for val1 in linespace:
        x.append(val)
        y.append(val1)

x = np.array(x) 
y = np.array(y) 
z = np.array(np.sin(np.sqrt(np.power(x,2)+np.power(y,2)))/np.sqrt(np.power(x,2)+np.power(y,2)))

rows = len(np.unique(x[~pd.isnull(x)]))
array_size = len(x)
columns = int(array_size/rows)

X = np.reshape(x, (rows, columns))
Y = np.reshape(y, (rows, columns))
Z = np.reshape(z, (rows, columns))

ax.plot_surface(X, Y, Z, rstride=1, cstride=1,
                 cmap = 'Blues', edgecolor='none')
plt.show()

这产生在此处输入图像描述

但是,如果我所做的只是删除 ax.plot_surface 中的 cmap 条目,我会得到以下信息:

在此处输入图像描述

为什么简单地添加一个 cmap 删除情节?

标签: pythonmatplotlib

解决方案


Matplotlib 很难用矩阵NaN中的 s 来缩放颜色图。Z我没有仔细看你的功能,但看起来你会NaN在 origin得到 a (0,0),而且看起来1是一个合理的替代品。因此,在Z = np.reshape(z, (rows, columns))我添加之后Z[np.isnan(Z)] = 1.,就得到了以下漂亮的图表: 在此处输入图像描述


推荐阅读