Matplotlib:如何在我的图表上绘制点而不是将它们绘制在按钮上?

Matplotlib: How to plot points on my graph instead of painting them on a button?

编辑ax.scatter(event.xdata, event.ydata) 工作正常,不知道我是如何通过这个的。然而,按下按钮仍然是画点,我想知道过滤坐标是否是解决这个问题的好方法。

这是我在轴上绘制一些点的最少代码。不幸的是,按钮代码 plt.scatter() 停止正常工作(按钮顶部开始出现点)。对我有什么建议吗?

import matplotlib.pyplot as plt
from matplotlib.widgets import Button

fig = plt.figure()
ax = fig.add_subplot(111)
ax.set_xlim([0, 10])
ax.set_ylim([0, 10])


def onclick(event):
    plt.scatter(event.xdata, event.ydata)
    fig.canvas.draw()


cid = fig.canvas.mpl_connect('button_press_event', onclick)


def do(event):
    print(1)


bprev = Button(plt.axes([0.7, 0.05, 0.1, 0.075]), 'Previous')
bprev.on_clicked(do)

plt.show()

要解决第一个问题,正如 T. 先生指出的那样,您可以使用 ax.scatter(event.xdata, event.ydata) 在主轴上绘图,而不是在按钮上绘图。

要解决单击按钮时绘制点的问题,可以使用event.inaxes 属性,它会告诉您鼠标单击的Axes 实例。因此,如果 event.inaxesax 相同,则绘制点;如果没有,那么它就在按钮中,所以什么都不做。

在你的函数中,它看起来像这样:

def onclick(event):
    if event.inaxes == ax:
        ax.scatter(event.xdata, event.ydata)
        fig.canvas.draw()