Python Plotly - Multiple YAXIS Legends Layout [duplikat]

Jan 18 2021

Próbuję zbudować 2 nałożone wykresy na tej samej figurze, jeden wykres słupkowy i jeden trend liniowy z poniższym kodem:

data = []

for __brand in df_cumsum['brand'].unique():

    data.append(go.Scatter(
        x=df_cumsum.loc[df_cumsum['brand'] == __brand, :]['day'],
        y=df_cumsum.loc[df_cumsum['brand'] == __brand, :]['ecpm_cum'],
        name=__brand,
        yaxis='y1'
    ))

    data.append(go.Bar(
        x=df_cumsum.loc[df_cumsum['brand'] == __brand, :]['day'],
        y=df_cumsum.loc[df_cumsum['brand'] == __brand, :]['impressions_cum'],
        name=__brand,
        yaxis='y2',
        opacity=0.3
    ))

figure = {'data': data,
          'layout': {'title': 'Delivery Performance Over Test Period (Days)',
                     'yaxis': {'title': 'Cumulative eCPM (USD)'},
                     'yaxis2': {'title': 'Cumulative Delivery (Impressions)', 'side': 'right', 'overlaying': 'y'}}}

W rezultacie mam coś podobnego do powyższego, gdzie obie legendy dla lewej osi i prawej osi są ze sobą zmieszane.

Czy ktoś wie, jak mogę umieścić każdy z nich na odpowiedniej stronie? Legenda dla lewej osi yaktycznej po lewej i legenda dla prawej osi yżowej po prawej? Z góry dziękuję !

Odpowiedzi

DerekO Jan 18 2021 at 16:31

Niestety Plotly nie obsługuje wielu legend . To jest otwarta kwestia.

Możesz ukryć lewe elementy legendy z jednej legendy, którą masz teraz, a następnie użyć prostokątnego pola adnotacji z tekstem nazw zmiennych trendu linii, aby zbudować lewą legendę od podstaw. Jednak legenda w rzeczywistości nie będzie miała żadnej funkcji przełączania w tym przypadku i będzie służyć tylko jako pole do wyświetlania nazw zmiennych.