Matplotlib 3D 投影层级问题

5

我遇到了一个相当奇怪的错误,这个错误来自于 contourf() 函数。我想为我的 3D 投影设置特定的最小值和最大值,但是当我试图设置比 -+max(Z) 更大的值时,就会出现以下错误信息:

文件 "C:\Program Files\Python38\lib\site-packages\mpl_toolkits\mplot3d\art3d.py" 的第 768 行,在 do_3d_projection() 函数中, zzs, segments_2d, self._facecolors2d, self._edgecolors2d, idxs =
ValueError: 没有足够的值可供解包 (期望 5 值,得到 0)

只有 -1 和 1 的 lmin、lmax 值是适用的或者更低的值。

以下是示例:

from pylab import *

mpName = 'seismic'

X = np.linspace(-np.pi, np.pi, 192)
Y = np.linspace(-np.pi, np.pi, 192)
X, Y = np.meshgrid(X, Y)
Z = np.sin(X*Y)


lmin,lmax = -2, 2 #
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.contourf(Y, X, Z, cmap='RdBu', zdir='z', offset=np.pi, levels=np.linspace(lmin,lmax,20))
ax.set_xlim3d(-np.pi, np.pi)
ax.set_ylim3d(-np.pi, np.pi)
ax.set_zlim3d(-np.pi, np.pi)
plt.show()

这个回答解决了你的问题吗?使用Python的matplotlib 3D API存在轮廓问题 - Mr. T
T先生,感谢您的建议,但那种情况并不能解决我的问题。我在设置contourf的级别方面遇到了问题。 - Gatto Nou
你能更清楚地说明你想要实现的目标吗?你想要数据的2D投影,但是某些z值可以省略吗?为什么要将最小和最大等高线级别设置在数据范围之外? - BenB
好问题。我需要这个是因为我有3个数据集,它们具有不同的最小/最大值。我正在绘制由3个投影组成的3D图形。为了保持一致的级别,我应该对每个数据集使用相同的最小/最大值。 - Gatto Nou
1个回答

2
所以,我找到了解决我的问题的方法。
conda remove --force matplotlib
conda install matplotlib=3.1.3

我不知道为什么,但最新版本会出现上述错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接