3 votes

Série temporelle avec plusieurs couleurs et légende en utilisant Datashader et Holoviews

J'aimerais tracer une série de données temporelles avec 3 colonnes, une pour chaque courbe. J'aimerais que chaque courbe ait sa propre couleur et affiche également une légende, comme suit hvplot() le fait par défaut.

Voici un exemple complet :

import numpy as np
import pandas as pd
import hvplot.pandas
import datetime
from holoviews.operation.datashader import datashade

n=1000
start = datetime.datetime(2010, 10, 1, 0)   # Start time
datetimerange = [start + datetime.timedelta(minutes=1)*i for i in range(n)]
A = np.random.randint(5, size=n)
B = np.random.randint(20, 40, size=n)
C = np.random.randint(10, 20, size=n)
d = {'datetime': datetimerange, 'A': A, 'B': B, 'C': C}
df = pd.DataFrame(d).set_index('datetime')

df.hvplot(cmap=['red', 'blue', 'green']) + datashade(df.hvplot(cmap=['red', 'blue', 'green']))

Voici le résultat (sans datashader à gauche, avec datashader à droite) :

enter image description here

Lorsque l'on passe le graphe à datashader, les couleurs et la légende sont perdues. L'utilisation de la fonction datashade=True argument de hvplot a le même résultat.

Il y a un tutoriel sur le traçage de séries temporelles dans la documentation Datashader mais c'est assez compliqué, il utilise datashader.transfer_functions.shade() comme base pour manipuler les graphiques sans beaucoup d'introduction sur la façon dont cela fonctionne et sur la façon dont les graphiques peuvent être manipulés. l'API n'est pas beaucoup plus claire . J'aimerais juste conserver ces caractéristiques de base que bokeh/hvplot fournit par défaut, je ne suis pas sûr de la raison pour laquelle datashader ne les préserve pas, donc je ne sais pas ce qu'il faut faire.

Comment puis-je signaler au datashader de conserver les différentes couleurs et de tracer une légende ?

1voto

Voici la moitié de la réponse, malheureusement cela ne donne pas de légende. Veuillez noter que .hvplot() a pour argument datashade=True construit en :

df.reset_index().melt(id_vars='datetime').hvplot.line(
    x='datetime', 
    y='value', 
    by='variable', 
    datashade=True, 
    dynamic=False,
)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X