Обработка клика мышки по графику в Matplotlib
Мне нужно, что бы при нажатии на plot у меня ставилась точка.
Есть вот такой код, все работает, но тут программа реагирует на абсолютно любой клик по графику, даже когда мы, например, зумим график.
Как это исправить?
from matplotlib import pyplot as plt
import numpy
from matplotlib.widgets import Button
if __name__ == "__main__":
x_pts = []
y_pts = []
fig, ax = plt.subplots()
#line, = ax.plot(x_pts, y_pts, marker="o")
scale_factor = 5
xmin, xmax = -100, 100
ymin, ymax = -100, 100
plt.xlim(xmin * scale_factor, xmax * scale_factor)
plt.ylim(ymin * scale_factor, ymax * scale_factor)
def onpick(event):
m_x, m_y = event.x, event.y
x, y = ax.transData.inverted().transform([m_x, m_y])
x_pts.append(x)
y_pts.append(y)
ax.plot(x, y, 'ro')
fig.canvas.draw()
fig.canvas.mpl_connect('button_press_event', onpick)
plt.show()
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте так
import numpy
from matplotlib import pyplot as plt
from matplotlib.widgets import Button
if __name__ == "__main__":
x_pts = []
y_pts = []
fig, ax = plt.subplots()
scale_factor = 5
xmin, xmax = -100, 100
ymin, ymax = -100, 100
plt.xlim(xmin * scale_factor, xmax * scale_factor)
plt.ylim(ymin * scale_factor, ymax * scale_factor)
def onpick(event):
tb = plt.get_current_fig_manager().toolbar # +++
print(repr(tb.mode),bool(tb.mode) ) # +++
if not tb.mode: # +++
m_x, m_y = event.x, event.y
x, y = ax.transData.inverted().transform([m_x, m_y])
x_pts.append(x)
y_pts.append(y)
ax.plot(x, y, 'ro')
fig.canvas.draw()
fig.canvas.mpl_connect('button_press_event', onpick)
plt.show()
