4 votes

Plotly python ajoute une annotation pour afficher toutes les valeurs des colonnes à chaque point

J'essaie de tracer toutes les valeurs des colonnes à chaque point lorsque nous survolons un point de données dans plotly.

Mon code est le suivant

import plotly.graph_objects as go
import plotly.io as pio
from plotly.subplots import make_subplots
import pandas as pd

# data
pio.templates.default = "plotly_white"
df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv')
df_s = df[['Date','AAPL.Open','AAPL.High','AAPL.Low','dn','mavg'
        ]]
df_s = df_s.set_index('Date')
df_s.tail()
cols = df_s.columns
ncols = len(cols)

# subplot setup
fig = make_subplots(rows=ncols, cols=1, shared_xaxes=True)

for i, col in enumerate(cols, start=1):
    fig.add_trace(go.Scatter(x=df_s[col].index, y=df_s[col].values, name=df_s[col].name), row=i, col=1)

fig.update_layout(
    autosize=False,
    width=1200,
    height=800,)

fig.show()

Actuellement, lorsque je survole le point de données, il affiche la valeur de cette colonne uniquement. Je souhaite voir Les valeurs des colonnes 'Date', 'AAPL.Open', 'AAPL.High', 'AAPL.Low', 'dn', 'mavg' sur une ligne particulière chaque fois que je survole un graphique.

enter image description here

J'ai essayé add_annotations sans succès. Existe-t-il un moyen de le faire ? Je vous remercie d'avance.

2voto

Derek O Points 4883

Comme l'a souligné @Marco_CH, cette fonctionnalité n'existe pas dans Plotly. Cependant, vous pouvez essayer d'utiliser un mode de survol unifié sur l'axe des x pour qu'il n'y ait qu'un seul hoverbox, et supprimer la date de chaque hovertemplate puisqu'elle est déjà affichée en haut du hoverbox.

import pandas as pd
import plotly.express as px 

df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv")
df1 = df.melt(id_vars=['Date']+list(df.keys()[5:]), var_name='AAPL')
fig = px.line(df1, x='Date', y='value', color='AAPL' )

## remove date from each hovertemplate
for fig_data in fig.data:
    fig_data['hovertemplate'] = fig_data['hovertemplate'].replace("<br>Date=%{x}","")
fig.update_layout(hovermode="x unified")

fig.show()

enter image description here

1voto

Marco_CH Points 133

Non, cela ne fonctionne pas. Il y a un problème ouvert à ce sujet :

https://github.com/plotly/plotly.js/issues/4755

Et cela ne semble pas près de se produire. Vous devez choisir entre votre voie et quelque chose comme ça :

import pandas as pd
import plotly.express as px 

pio.templates.default = "plotly_white"
df_s = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/finance-charts-apple.csv")
df_s = df_s.melt(id_vars=["Date"]+list(df.keys()[5:]), var_name="AAPL")

fig = px.line(df_s, x="Date", y="value", color="AAPL")

fig.update_layout(
    autosize=False,
    width=1200,
    height=800,
    hovermode="x")

fig.show()

Sortie :

enter image description here

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