Ввод данных с помощью 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)]
→ Ссылка