Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Customizing the order of legends in plotly

I am trying to customize the order of legends while plotting stacked bar plots in plotly,python.

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

The order of the legend appears in the reverse order(i.e from bottom to top). I want to change the order from top to bottom of the corresponding items in data.

I saw the option suggested here for java. Not sure how to implement in python.

Could someone suggest how the order can be reversed?

EDIT: In the image that is generated the order of legend is

B
A

Desired order:

A
B
like image 496
Natasha Avatar asked Jun 28 '19 14:06

Natasha


People also ask

How do you increase legend size in plotly?

Plotly's update_layout() function is used to change legend size in the plotly chart. The values in the input dict / keyword arguments are used to iteratively alter the parts of the original layout.

How do you not show legend on plotly?

Syntax: For legend: fig. update_traces(showlegend=False)

What is opacity in plotly?

Opacity. Setting opacity outside the marker will set the opacity of the trace. Thus, it will allow greater visibility of additional traces but like fully opaque it is hard to distinguish density. import plotly.graph_objects as go # Generate example data import numpy as np x = np.

What is the difference between plotly and Plotly Express?

Overview. The plotly. express module (usually imported as px ) contains functions that can create entire figures at once, and is referred to as Plotly Express or PX. Plotly Express is a built-in part of the plotly library, and is the recommended starting point for creating most common figures.


1 Answers

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

like image 194
sentence Avatar answered Oct 25 '22 07:10

sentence