Есть события во времени, значения которых значительно меняются.
Я хочу добавить два «кликабельных» элемента в виде вертикальных линий для обозначения два из упомянутых событий, позже я хочу отобразить их временные значения и рассчитанную разницу.
import matplotlib.pyplot as plt
time = [1,2,3,4,5,6,7,8,9,10,11,12,13,13,15,16,17,18,19,20]
ch1_scope = [0,0,0,0,5,5,5,5,0,0,0,0,5,5,5,5,0,0,0,0]
ch2_scope = [5,5,5,5,0,0,0,0,5,5,5,5,0,0,0,0,5,5,5,5]
fig, (ax1, ax2) = plt.subplots(2, sharex = True)
ax1.plot(time, ch1_scope, 'tab:red')
ax1.set_title("Vph1")
ax2.plot(time, ch2_scope, 'tab:olive')
ax2.set_title("Vph2")
Этот минимальный код создает:

Как этого добиться с помощью matplotlib? Возможно ли это вообще без перерисовки/перерисовки?
Простой скрипт, в котором возможно добавление вертикальных линий, это было бы хорошим началом.
После некоторого времени пытается добавить этот курсор:
import matplotlib.pyplot as plt
from matplotlib.widgets import Cursor
time = [1,2,3,4,5,6,7,8,9,10,11,12,13,13,15,16,17,18,19,20]
ch1_scope = [0,0,0,0,5,5,5,5,0,0,0,0,5,5,5,5,0,0,0,0]
ch2_scope = [5,5,5,5,0,0,0,0,5,5,5,5,0,0,0,0,5,5,5,5]
fig, (ax1, ax2) = plt.subplots(2, sharex = True)
ax1.plot(time, ch1_scope, 'tab:red')
ax1.set_title("Vph1")
ax2.plot(time, ch2_scope, 'tab:olive')
ax2.set_title("Vph2")
cursor = Cursor(
ax1, useblit=True, horizOn=False, vertOn=True, color="red", linewidth=0.5)
plt.show()

Это неудовлетворительно, так как курсор не перемещается постоянно (масштабирование убивает его). Также отсутствует возможность динамического добавления обозначений на график.
Добавлена часть события клика. Это выведет на консоль некоторую текущую информацию о положении мыши. Как перенести это в сюжет?
enter code here
import matplotlib.pyplot as plt
from matplotlib.widgets import Cursor
from matplotlib.backend_bases import MouseButton
time = [1,2,3,4,5,6,7,8,9,10,11,12,13,13,15,16,17,18,19,20]
ch1_scope = [0,0,0,0,5,5,5,5,0,0,0,0,5,5,5,5,0,0,0,0]
ch2_scope = [5,5,5,5,0,0,0,0,5,5,5,5,0,0,0,0,5,5,5,5]
fig, (ax1, ax2) = plt.subplots(2, sharex = True)
ax1.plot(time, ch1_scope, 'tab:red')
ax1.set_title("Vph1")
ax2.plot(time, ch2_scope, 'tab:olive')
ax2.set_title("Vph2")
cursor = Cursor(
ax1, useblit=True, horizOn=False, vertOn=True, color="red", linewidth=0.5
)
def on_move(event):
if event.inaxes:
print(f'data coords {event.xdata} {event.ydata},',
f'pixel coords {event.x} {event.y}')
def on_right_click(event):
if event.button is MouseButton.LEFT:
print(f'Clicked LMB: data coords {event.xdata} {event.ydata}')
if event.button is MouseButton.RIGHT:
print('disconnecting callback')
plt.disconnect(binding_id)
binding_id = plt.connect('motion_notify_event', on_move)
plt.connect('button_press_event', on_right_click)
plt.show()
Подробнее здесь: https://stackoverflow.com/questions/790 ... matplotlib
Мобильная версия