bqplot Linee piene di blocchi tooltip

Oct 06 2020

Sto cercando di tracciare una previsione di serie temporale, circondata da una serie temporale di intervallo di incertezza ombreggiato, e fare in modo che i suggerimenti funzionino sia per la linea che per il perimetro dell'incertezza.

import pandas as pd
from bqplot import *
daterange = pd.date_range(start='2020-01-01', freq='1D', periods=20)
df = pd.DataFrame(index=daterange)
df['fcst'] = np.sin(np.arange(0,20)*2*np.pi / 20)

tt_ex = Tooltip(fields=['x', 'y' ], labels=['', ''], formats=["%B %Y", ',.2f'])

x_sc = DateScale()
y_sc = LinearScale()

fcst_vals = np.arange(0,20)*2*np.pi / 20

x_ax_fcst = Axis(scale=x_sc)
y_ax_fcst = Axis(scale=y_sc, orientation='vertical', tick_format='.2f')


fcst_uncertainty = Lines(x=[daterange.append(daterange[::-1])], 
                         y=[((df['fcst']+0.2).append((df['fcst'][::-1]-0.2)))],
                         fill_colors=['blue'],
                         fill='inside',
                         marker = 'cross',
                         stroke_width=1,
                         close_path=True,
                         scales={'x': x_sc, 'y': y_sc},
                         tooltip=tt_ex)
fcst_uncertainty.fill_opacities = [0.2]

fcst_line = Lines(x=[daterange], y=[df['fcst']],
                  scales={'x': x_sc, 'y': y_sc}, 
                  marker='circle', colors=['blue'],
                  tooltip=tt_ex)

example_fig = Figure(marks=[
    fcst_line,
    fcst_uncertainty
], axes=[x_ax_fcst, y_ax_fcst])

display(example_fig)

Ma il riempimento sta bloccando il suggerimento per la serie temporale principale che si trova all'interno dell'area riempita. C'è un modo semplice per aggirare questo? Se rimuovo il riempimento, funziona come desiderato. Ma io voglio il riempimento. Ho provato a creare un altro oggetto Lines senza un'interazione del tooltip e facendo in modo che fosse l'oggetto pieno, ma neanche quello ha funzionato. Grazie!

Risposte

2 ac24 Oct 06 2020 at 15:13

Ti prenderai a calci ... riordina i segni nella Figurechiamata per mettere prima l'incertezza e poi la linea. L'ordine dell'elenco funziona in modo simile a zorderin matplotlib.

example_fig = Figure(marks=[
    fcst_uncertainty,
    fcst_line,

], axes=[x_ax_fcst, y_ax_fcst])

A proposito, bell'esempio.