Alinhar vários eixos Y a um valor no Plotly

Sep 03 2020

Eu tenho o seguinte código (ligeiramente modificado da página do 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()

Isso dá como resultado

Agora você vê os dois círculos vermelhos à esquerda e um à direita. Você pode ver que o valor 50 não está alinhado ao mesmo retângulo.

Como posso fazer com que o eixo Y esquerdo e o eixo Y direito estejam alinhados em um ponto específico? (na maioria dos casos seria 0)

EDIT: Gostaria de esclarecer que os valores em ambos os eixos (esquerdo e direito) podem ser muito diferentes. Gostar

Eu só quero que o alinhamento de um valor (neste caso, o 0) esteja no mesmo nível

Respostas

1 vestland Sep 03 2020 at 09:05

Você pode fazer assim:

  1. Defina (ou encontre) os valores mínimo e máximo apropriados para seus eixos y,
  2. ajuste seus intervalos de y usando fig.update_layout(yaxis=dict(range=[all_min,all_max]), yaxis2=dict(range=[all_min,all_max])), e
  3. defina o scaleanchorde seu eixo y secundário y1desta forma:fig.update_layout(yaxis2=dict(scaleanchor = 'y1'))

Enredo:

Se a fonte dos dados de sua figura for um dataframe do pandas, há maneiras mais elegantes de encontrar valores máximos e mínimos globais do que apenas codificá-los lá. Caso contrário, a abordagem será a mesma.

Código completo: