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

Posted

技术标签:

【中文标题】Matplotlib:如何在我的图表上绘制点而不是在按钮上绘制它们?【英文标题】:Matplotlib: How to plot points on my graph instead of painting them on a button? 【发布时间】:2021-02-26 04:51:45 【问题描述】:

编辑ax.scatter(event.xdata, event.ydata) 工作正常,IDK 我是怎么过去的。但是,按下按钮仍然是画点,我想知道过滤坐标是否是解决这个问题的好习惯。

这是我在轴上绘制一些点的最小代码。不幸的是,按钮代码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()

【问题讨论】:

赞成伟大的(虽然是无意的)效果。不过,让它ax.scatter(event.xdata, event.ydata) @Mr.T 谢谢!!! IDK我是怎么过去的......然后我想我会通过坐标过滤点击以避免在点击按钮时绘画。 【参考方案1】:

要解决第一个问题,正如 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()

【讨论】:

以上是关于Matplotlib:如何在我的图表上绘制点而不是在按钮上绘制它们?的主要内容,如果未能解决你的问题,请参考以下文章

为什么索引显示图表而不是国家?使用Matplotlib水平条形图

Matplotlib 图未显示

Python/MatPlotLib:无法在 y 轴上打印正确的数据

如何在我的数组上使用 forEach 循环在我的图表上绘制 x 和 y 变量(Chart.js)

Python matplotlib - 如何在x轴上绘制一条线?

使用 MatPlotLib 绘制连续的数据流