Я играю со сценарием и хочу отображать дату подсвечника при наведении на него курсора. Сценарий Mouse Hover в подсвечнике matplotlib для python. Соответствующую дату можно правильно напечатать при наведении на подсвечник. Вот скрипт
import datetime as dt
from datetime import datetime
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib import style
import matplotlib.dates as mdates
from matplotlib.dates import num2date
from mpl_finance import candlestick_ohlc
import numpy as np
style.use('fivethirtyeight')
fig = plt.figure()
ax1 = plt.subplot2grid((4, 1), (0, 0), rowspan=4, colspan=1)
ticker = 'AAPL'
input_date = dt.date(2020, 4, 1)
path = '../DATA/stocks_from_Nasdaq/{}.csv'.format(ticker)
df = pd.read_csv(path)
input_date_str = '{:%Y-%m-%d}'.format(input_date)
df = df[df['date'] >= input_date_str]
dates = df['date'].tolist()
closep = df['close'].tolist()
dates_2 = [dt.datetime.strptime(x, '%Y-%m-%d') for x in dates]
df['date_ohlc'] = [mdates.date2num(date) for date in dates_2]
date_ohlc = df['date_ohlc'].tolist()
df_ohlc = df[['date_ohlc', 'open', 'high', 'low', 'close']]
ohlc = df_ohlc.values.tolist()
candlestick_ohlc(ax1, ohlc, width=0.4, colorup='g', colordown='r')
bbox_props = dict(boxstyle='round', fc='w', ec='k', lw=1)
ax1_annot = ax1.annotate(str(dates[-1]), (dates_2[-1], closep[-1]),
xytext = (dates_2[-1], closep[-1]), bbox=bbox_props)
ax1_annot.set_visible(False)
def on_move(event):
global ax1_annot
ax = event.inaxes
if ax is not None:
date_ordinal, y = ax.transData.inverted().transform([event.x, event.y])
date = num2date(date_ordinal)
def sorter(quote):
return abs(quote - date_ordinal)
df['date_ohlc'].tolist().sort(key=sorter)
print(date.date)
ax1_annot.set_text(str(date.date()))
ax1_annot.set_visible(True)
on_move_id = fig.canvas.mpl_connect('motion_notify_event', on_move)
plt.show()
Однако ожидаемая аннотация вообще не появляется.
ax1_annot.set_text(str(date.date()))
ax1_annot.set_visible(True)
Кажется, что эти две строки кода не имеют никакого эффекта, и я понятия не имею, почему.
Я проверил другие скрипты, такие как Можно ли сделать так, чтобы метки появлялись при наведении курсора на точку в matplotlib? , но все они говорили о точечных, линейных и линейных графиках, но не о графике свечей. Что я могу попробовать дальше?