PyPlot图例:“ Poly3DCollection”对象没有属性“ _edgecolors2d”

时间:2019-03-05 02:34:52

标签: python matplotlib mplot3d

在我取消注释InputStream行之前,以下代码段可以正常工作:

plt.legend()

我收到以下错误: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D x = np.linspace(-1, 1) y = np.linspace(-1, 1) X, Y = np.meshgrid(x, y) Z = np.sqrt(X**2 * Y) fig = plt.figure() ax = fig.add_subplot(111, projection='3d') ax.plot_surface(X, Y, Z, label='h=0') ax.plot(np.zeros_like(y), y, np.zeros_like(y), label='singular points') # plt.legend() plt.show()

我以为原因可能是我在二维绘图中使用了plt.legend()的'Poly3DCollection' object has no attribute '_edgecolors2d'framealpha参数,但是我重新启动了运行时(我正在Google Colab Jupyter笔记本),清除所有变量,问题仍然存在。

什么可能导致此错误?

3 个答案:

答案 0 :(得分:4)

更新@AmilaMGunawardana 的回答

matplotlib 3.3.3 开始,_facecolors3d_edgecolors3d 不存在。所以,而不是这样:

surf._facecolors2d = surf._facecolors3d
surf._edgecolors2d = surf._edgecolors3d

这会导致类似的 AttributeError,试试这个:

surf._facecolors2d = surf._facecolor3d
surf._edgecolors2d = surf._edgecolor3d

由于代表人数少,我不得不将其作为答案而不是评论。

答案 1 :(得分:2)

您好,我发现这仍然是库开发人员试图找出的错误。 我在git

中找到了关于该问题的以下主题

他们给出的建议是获取情节

surf = ax.plot_surface(X, Y, Z, label='h=0') surf._facecolors2d=surf._facecolors3d surf._edgecolors2d=surf._edgecolors3d

答案 2 :(得分:0)

ax._facecolors2d = ax._facecolor

在 Matplotlib 3.3.4 中为我工作。