Возникла проблема с использованием matplotlib
event.xdata
при построении pandas.Timeseries
, я попытался воспроизвести ответ, предложенный в очень связанном вопросе , но получил очень странное поведение.
Вот код, адаптированный к python3
и с немного большим количеством функций в функции on_click()
:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
def on_click(event):
if event.inaxes is not None:
# provide raw and converted x data
print(f"{event.xdata} --> {mdates.num2date(event.xdata)}")
# add a vertical line at clicked location
line = ax.axvline(x=event.xdata)
plt.draw()
t = pd.date_range('2015-11-01', '2016-01-06', freq='H')
y = np.random.normal(0, 1, t.size).cumsum()
df = pd.DataFrame({'Y':y}, index=t)
fig, ax = plt.subplots()
line = None
df.plot(ax=ax)
fig.canvas.mpl_connect('button_press_event', on_click)
plt.show()
Если я запусту это, я получу следующую диаграмму с ожидаемым диапазоном дат между ноябрем.2015 и январь 2016 года, а также информация о положении курсора в нижнем колонтитуле окна (здесь 2015-11-01 10:00) и правильное расположение вертикальных линий:
Однако вывод командной строки выглядит следующим образом:
C:\Users\me\Documents\code\>python matplotlib_even.xdate_num2date.py
402189.6454115977 --> 1102-02-27 15:29:23.562039+00:00
402907.10400704964 --> 1104-02-15 02:29:46.209088+00:00
Эти значения event.xdata
явно находятся вне диапазона входных данных и диапазона данных оси x, инепригодны для последующего использования (например, попробуйте найти ближайшее значение y в серии).
Итак, кто-нибудь знает, как я могу получить правильный xdata
?