Настройка порядка легенд в сюжете - PullRequest
1 голос
/ 28 июня 2019

Я пытаюсь настроить порядок легенд при построении графиков в виде столбчатых столбцов на pylot.

data = [
        go.Bar(
            y=df['sid'],  # assign x as the dataframe column 'x'
            x=df['A'],
            orientation='h',
            name='A'
        ),
        go.Bar(
            y=df['sid'],
            x=df['B'],
            orientation='h',
            name='B'
        ),

    ]

    layout = go.Layout(
        barmode='stack',
        title=f'{measurement}',
        xaxis=dict(
            title='Count',
            dtick=0),
        yaxis=dict(
            tickfont=dict(
                size=10,
            ),
            dtick=1)
    )

    fig = go.Figure(data=data, layout=layout)
    plot(fig, filename='plot.html')

Порядок легенды отображается в обратном порядке (т.е. снизу вверх). Я хочу изменить порядок сверху вниз соответствующих элементов в data.

Я видел предложенный вариант здесь для Java. Не уверен, как реализовать в Python.

Может кто-нибудь подсказать, как можно отменить заказ?

EDIT: На сгенерированном изображении порядок легенды

B
A

Желаемый заказ:

A
B

1 Ответ

1 голос
/ 28 июня 2019

Вы можете использовать traceorder ключ для легенды:

Определяет порядок отображения элементов легенды. Если «нормально», элементы отображаются сверху вниз в том же порядке, что и входные данные. Если «перевернуто», элементы отображаются в противоположном порядок как "нормальный". Если «сгруппированы», элементы отображаются в группах (когда указана legendgroup). если "сгруппировано + перевернуто", то элементы отображаются в обратном порядке как «сгруппированные».

В вашем случае вам следует изменить определение layout:

layout = go.Layout(
    barmode='stack',
    title=f'{measurement}',
    xaxis=dict(
        title='Count',
        dtick=0),
    yaxis=dict(
        tickfont=dict(
            size=10,
        ),
        dtick=1),
   legend={'traceorder':'normal'})
)

без спецификации трассировщика

import plotly.graph_objs as go
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode(connected=True)

trace1 = go.Bar(x=['A', 'B', 'C'],
                y=[20, 14, 23],
                name='first')
trace2 = go.Bar(x=['A', 'B', 'C'],
                y=[12, 18, 29],
                name='second')

data = [trace1, trace2]
layout = go.Layout(barmode='stack',)

fig = go.Figure(data=data, layout=layout)
iplot(fig, filename='stacked-bar')

enter image description here

со спецификацией трассировщика

import plotly.graph_objs as go
from plotly.offline import init_notebook_mode, iplot
init_notebook_mode(connected=True)

trace1 = go.Bar(x=['A', 'B', 'C'],
                y=[20, 14, 23],
                name='first')
trace2 = go.Bar(x=['A', 'B', 'C'],
                y=[12, 18, 29],
                name='second')

data = [trace1, trace2]
layout = go.Layout(barmode='stack',
                   legend={'traceorder':'normal'})

fig = go.Figure(data=data, layout=layout)
iplot(fig, filename='stacked-bar')

enter image description here

...