`fig.update_traces(xaxis=..)` will destroy `hline` or `vline` objects on subplots
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 18.8k
- Fork
- 2.8k
- Merge medio
- 16h 26m
- PR unite (30g)
- 21
Descrizione
Summary
When the figure is created by make_subplots, updating traces' xaxis or yaxis will destroy hline or vlines from user's view.
Details
The following picture represents my figure created with subplots of 3 rows and 1 column. It has horizontal line added by figure.add_hline(y=0.0, ...).
def get_historical_charts(
tournaments: list[TournamentSummary],
max_data_points: int = 2000,
window_sizes: tuple[int, ...] = DEFAULT_WINDOW_SIZES,
):
# .... some dirty codes..
figure.add_hline( # <-------------------------------- ADDED hline
y=0.0,
line_color="red",
line_dash="dash",
row=1,
col=1,
label={
"text": "Break-even",
"textposition": "end",
"font": {"color": "red"},
"yanchor": "top",
},
)
figure.update_layout(
title="Historical Performance",
hovermode="x unified",
yaxis1={"tickformat": "$"},
yaxis2={"tickformat": "%"},
yaxis3={"tickformat": "$"},
)
figure.update_yaxes(row=3, col=1, patch={"type": "log"})
# figure.update_traces(xaxis="x3") # <------------------------------------- WILL CHANGE HERE
return figure
However, I wanted to display vertical dash line on all subplots regardless of which graph you are focusing. I googled and found figure.update_traces(xaxis="x3") will make this work, but it destroyed hline. Notice that red dash line is disappeared on the second picture.
def get_historical_charts(
tournaments: list[TournamentSummary],
max_data_points: int = 2000,
window_sizes: tuple[int, ...] = DEFAULT_WINDOW_SIZES,
):
# .... some dirty codes..
figure.add_hline( # <-------------------------------- ADDED hline
y=0.0,
line_color="red",
line_dash="dash",
row=1,
col=1,
label={
"text": "Break-even",
"textposition": "end",
"font": {"color": "red"},
"yanchor": "top",
},
)
figure.update_layout(
title="Historical Performance",
hovermode="x unified",
yaxis1={"tickformat": "$"},
yaxis2={"tickformat": "%"},
yaxis3={"tickformat": "$"},
)
figure.update_yaxes(row=3, col=1, patch={"type": "log"})
figure.update_traces(xaxis="x3") # <------------- UPDATED XAXIS AND hline IS DESTROYED
return figure
Note that there is only 1 line of difference from above two codes.
For full codes, you can refer my repository's code.
For bandaid, I can do figure.update_traces(xaxis="x1") instead, but it will destroy custom objects on second/third subplot. So this is not a fundamental resolution.
Personally I think showing horizontal or vertical dash line to indicate which x or y are you hovering is important. However, with current status you can potentially destroy custom plot objects like hline if you do that.
Thanks for reading this.
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia riproducendo il problema con make_subplots, add_hline e figure.update_traces(xaxis="x3"); il file visualize.py collegato fornisce l’esempio completo. Traccia il modo in cui update_traces modifica le assegnazioni degli assi e il modo in cui sono rappresentati gli oggetti hline dei subplot. Il lavoro è completato quando l’aggiornamento degli assi delle trace conserva ogni hline e vline tra i subplot e l’esempio segnalato continua a visualizzarli.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- plotly, python
- Ambito
- data-visualization
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Attiva
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 55/100