Allinea più assi Y a un valore in Plotly

Sep 03 2020

Ho il seguente codice (leggermente modificato dalla pagina di Plotly)

import plotly.graph_objects as go
from plotly.subplots import make_subplots

# Create figure with secondary y-axis
fig = make_subplots(specs=[[{"secondary_y": True}]])

# Add traces
fig.add_trace(
    go.Scatter(x=[1, 2, 3], y=[40, 50, 60], name="yaxis data"),
    secondary_y=False,
)

fig.add_trace(
    go.Scatter(x=[2, 3, 4], y=[80, 40, 30], name="yaxis2 data"),
    secondary_y=True,
)

# Add figure title
fig.update_layout(
    title_text="Double Y Axis Example"
)

# Set x-axis title
fig.update_xaxes(title_text="xaxis title")

# Set y-axes titles
fig.update_yaxes(title_text="<b>primary</b> yaxis title", secondary_y=False)
fig.update_yaxes(title_text="<b>secondary</b> yaxis title", secondary_y=True)

fig.show()

Questo dà come risultato

Ora vedi i due cerchi rossi a sinistra e uno a destra. Puoi vedere che il valore 50 non è allineato allo stesso rettangolo.

Come posso fare in modo che l'asse Y sinistro e l'asse Y destro siano allineati in un punto particolare? (nella maggior parte dei casi sarebbe 0)

EDIT: Vorrei chiarire che i valori in entrambi gli assi (sinistro e destro) possono essere ampiamente diversi. Piace

Voglio solo che l'allineamento di un valore (in questo caso lo 0) sia allo stesso livello

Risposte

1 vestland Sep 03 2020 at 09:05

Puoi farlo in questo modo:

  1. Imposta (o trova) i valori minimi e massimi appropriati per i tuoi assi y,
  2. regola i tuoi intervalli y usando fig.update_layout(yaxis=dict(range=[all_min,all_max]), yaxis2=dict(range=[all_min,all_max])), e
  3. imposta il scaleanchortuo asse y secondario in y1questo modo:fig.update_layout(yaxis2=dict(scaleanchor = 'y1'))

Tracciare:

Se la dimensione dei dati della tua figura è un dataframe di panda, ci sono modi più eleganti per trovare i valori massimi e minimi globali che semplicemente codificarli lì dentro. In caso contrario, l'approccio sarà lo stesso.

Codice completo: