Customizing the order of legends in plotly

You can use traceorder key for legend:

Determines the order at which the legend items are displayed. If
“normal”, the items are displayed top-to-bottom in the same order as
the input data. If “reversed”, the items are displayed in the opposite
order as “normal”. If “grouped”, the items are displayed in groups
(when a trace legendgroup is provided). if “grouped+reversed”, the
items are displayed in the opposite order as “grouped”.

In your case, you should modify your layout definition:

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'})
)

without traceorder specification

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

with traceorder specification

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

Leave a Comment