Matplotlib意外的contains_point()导致嵌套甜甜圈图

时间:2019-05-25 17:27:24

标签: python matplotlib

我在尝试获取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()

结果是此图:

enter image description here

打印的“坐标”与预期完全一样,直到外圈仅包含一个值并且图表如下所示:

enter image description here

在这种情况下,单击任何楔形总是在外圈上产生正结果。因此,当我单击外圈时,我得到(0, 0),这很好。但是,当我单击内圈的第一个楔形时,得到(0, 0)(1, 0)。与内圈上的其他楔子相同。

我还注意到,在这种情况下,单击图表内的空白圆圈会导致误报(0, 0),而在第一张图表上并非如此。

contains_point()应该是这样工作的吗?

0 个答案:

没有答案