相关疑难解决方法(0)

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

在取消注释该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()
Run Code Online (Sandbox Code Playgroud)

我收到以下错误: 'Poly3DCollection' object has no attribute '_edgecolors2d'

我以为原因可能是我在2d图中使用了plt.legend()framealphaframeon参数,但是我重新启动了运行时(我在Google Colab Jupyter Notebook中工作),清除了所有变量,然后问题仍然存在。

是什么导致此错误?

python matplotlib mplot3d

5
推荐指数
2
解决办法
1144
查看次数

有没有办法在 matplotlib 中标记多个 3d 表面?

我试图用线性约束解决非线性数学优化问题。为此,我试图在 3d 中可视化约束以了解正在发生的事情以及为什么我为约束中的某些参数而不是其他参数获得了可行的解决方案。

为了实现这一点,我想使用python 中的matplotlib来生成 3d 表面(平面,因为我的所有约束都是线性的)。

但是,如果没有图内标记,则很难确定哪个曲面属于哪个约束。这让我想寻找一种方法来在情节内添加带有颜色的图例。

我认识到已经有一种方法可以在 2D 中执行此操作,在方法中ax.plot()或 中ax.scatter(),但是尝试执行相同操作并不起作用ax.plot_surface(X, Y, Z, label = 'mylabel')

完整脚本如下:


from mpl_toolkits import mplot3d
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np


fig = plt.figure()
ax = plt.axes(projection='3d')

plt.rcParams['legend.fontsize'] = 10


# First constraint
g2 = np.linspace(-5,5,2)
g3 = np.linspace(-5,5,2)
G2,G3 = np.meshgrid(g2,g3)
G4_1 = -1.18301270189222 - 0.5*G2 + 0.5*G3
ax = fig.gca(projection='3d')
c1 = ax.plot_surface(G2, G3, G4_1, label = "c1") …
Run Code Online (Sandbox Code Playgroud)

python matplotlib

5
推荐指数
2
解决办法
2817
查看次数

标签 统计

matplotlib ×2

python ×2

mplot3d ×1