Ввод данных с помощью matplotlib
Есть задача реализовать эволюцию некой физической модели. Для этого хочу красиво реализовать ввод начальных данных, которыми являются точки на плоскости. Возможно ли используя Streamlit (знаю, он создан немного не для этого) и matplotlib (или другую бесплатную библиотеку для отрисовки) реализовать ввод начальных точек с помощью клика в нужное место?
Ответы (1 шт):
Автор решения: Pak Uula
→ Ссылка
Вам достаточно matplotlib с интерактивным бэкэндом. В примере ниже я использую PyQt5
Функция mpl_connect добавляет к окошку обработчики кликов и клавиатуры.
import matplotlib.pyplot as plt
import matplotlib
matplotlib.rcParams['backend'] = 'Qt5Cairo'
fig = plt.figure()
ax = fig.gca()
ax.set_xlim([0, 1])
ax.set_ylim([0, 1])
# Массив, куда будут записываться точки
dots = []
# Обработчик кликов
# Поля xdata и yfdata содержат координаты в масштабе осей
def btn_pressed(evt):
dots.append((evt.xdata, evt.ydata))
print(f"New point: <{evt.xdata},{evt.ydata}>")
evt.inaxes.plot(evt.xdata, evt.ydata, 'o')
fig.canvas.draw()
cid = fig.canvas.mpl_connect('button_press_event', btn_pressed)
plt.show()
print(dots)
Лог:
& D:/Software/Python/python.exe ./some.py
New point: <0.5060483870967742,0.5146103896103896>
New point: <0.38104838709677424,0.31439393939393945>
[(0.5060483870967742, 0.5146103896103896), (0.38104838709677424, 0.31439393939393945)]
