Мне сложно найти лучший способ сделать интерактивный график временных рядов. Моя конечная цель - дважды извлечь из графика и вернуть эти два значения для дальнейшего расчета. У меня есть график временного ряда, который мне нужно увеличить, чтобы получить как можно более точное время выборки. Затем я хочу иметь возможность ударить по клавиатуре с помощью 1 , 2 или q (если я закончил выбор и хочу выйти из сюжета и возвращаемые значения). После того, как я нажму 1 или 2 , я хочу иметь возможность «щелкнуть правой кнопкой мыши» место графика, где я хочу выбрать время (event.xdata
), которое отображается сигнал интереса. После выбора 1 или 2 раз на графике (я также хочу быть достаточно надежным, чтобы иметь возможность перебивать 1 или 2 выберите, если первый плохой), я хочу иметь возможность нажать кнопку [Qq]
, чтобы закрыть сам график и вернуть эти два значения в мой основной код для сохранения в кадре данных pandas. Следующий код - это то, что у меня есть до сих пор, но я знаю, что мой logi c где-то неверен, потому что, когда я нажимаю Q / q , график не закрывается, и я не делаю этого. Я возвращаю свои значения pk1 и pk2 к моему основному коду. Я пытался понять все это, используя страницу https://matplotlib.org/3.2.1/users/event_handling.html для обработки событий как для нажатий на клавиатуре, так и для щелчков мышью, но я не могу понять, что происходит. Также отмечу, что при попытке нажать ctrl + s появляется окно GUI для сохранения фигуры. Я не знаю, есть ли у меня конфликтующие сочетания клавиш, но это тоже проблема. Будем очень признательны за любые рекомендации или помощь в выполнении этой работы.
def OnKey(event):
print("\n --- Right click to select 1 or 2 location ---\n")
global pk1, pk2
if event.key == "ctrl+p":
print('You selected picking 1 operation')
tpk = []
if len(tpk) < 1:
# call the mouse picking event function for 1nd pick
cid = fig.canvas.mpl_connect('button_press_event', OnClick)
pk1 = tpk
elif event.key == "ctrl+s":
print('You selected picking 2 operation')
tpk = []
if len(tpk) < 1:
# call the mouse picking event function for 2nd pick
cid = fig.canvas.mpl_connect('button_press_event', OnClick)
pk2 = tpk
elif event.key== "ctrl+q":
fig.canvas.mpl_disconnect(cid)
plt.close()
else:
print('No picking operation selected. \n\tPlease press __ctrl+p__ or __ctrl+s__ key to select from plot\n\tPress Q to quit plot')
return pk1, pk2
def OnClick(event):
if event.dblclick:
print("DBLCLICK")
# pass
elif event.button == 3: # 3 == right click
tpk = event.xdata
keepit = input(" Keep it? {1|0} ")
if keepit == 0:
tpk = 0
else:
tpk = UTCDateTime(tpk) # this is a function to take time stamp to UTC time
print(' Phase Pick: ', tpk)
return tpk
pk1 = []; pk2= []
# call click function
cid = fig.canvas.mpl_connect('button_press_event', OnKey)
print("\n --- Press Ctrl+p -- Ctrl+s to pick 1 or 2 phase ---\n")
plt.show()
return pk1, pk2```