我在尝试获取Patch.contains_point()
方法以在嵌套甜甜圈图中工作时遇到问题。这是我的代码:
fig, ax = plt.subplots()
ax.axis('equal')
width = 0.3
pie, _ = ax.pie([120, 120], radius=1)
plt.setp(pie, width=width, edgecolor='white')
pie2, _ = ax.pie([60, 60, 37, 40, 29, 10], radius=1 - width)
plt.setp(pie2, width=width, edgecolor='white')
def button_release(event):
if event.inaxes == ax:
pos = [event.x, event.y]
for i, p in enumerate([pie, pie2]):
for j, w in enumerate(p):
if w.contains_point(pos):
print(i, j)
fig.canvas.mpl_connect("button_release_event", button_release)
plt.show()
结果是此图:
打印的“坐标”与预期完全一样,直到外圈仅包含一个值并且图表如下所示:
在这种情况下,单击任何楔形总是在外圈上产生正结果。因此,当我单击外圈时,我得到(0, 0)
,这很好。但是,当我单击内圈的第一个楔形时,得到(0, 0)
和(1, 0)
。与内圈上的其他楔子相同。
我还注意到,在这种情况下,单击图表内的空白圆圈会导致误报(0, 0)
,而在第一张图表上并非如此。
contains_point()
应该是这样工作的吗?