info-bulle de blocs de lignes remplies bqplot

Oct 06 2020

J'essaie de tracer une prévision de série chronologique, entourée d'une série de temps d'intervalle d'incertitude ombrée, et de faire fonctionner les info-bulles pour la ligne et le périmètre de l'incertitude.

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)

Mais le remplissage bloque l'info-bulle pour la série temporelle principale qui se trouve à l'intérieur de la région remplie. Y a-t-il un moyen simple de contourner cela? Si je supprime le remplissage, cela fonctionne comme vous le souhaitez. Mais je veux le remplissage. J'ai essayé de créer un autre objet Lines sans interaction avec une info-bulle et d'avoir cet objet rempli, mais cela n'a pas fonctionné non plus. Merci!

Réponses

2 ac24 Oct 06 2020 at 15:13

Vous vous donnerez un coup de pied ... réorganisez les marques de l' Figureappel pour placer l'incertitude en premier, et la ligne en second. L'ordre de la liste fonctionne de la même manière que zorderdans matplotlib.

example_fig = Figure(marks=[
    fcst_uncertainty,
    fcst_line,

], axes=[x_ax_fcst, y_ax_fcst])

Bel exemple d'ailleurs.