在 plotly 中自定义图例的顺序

Nat*_*sha 12 python legend bar-chart python-3.x plotly

我试图在 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')
Run Code Online (Sandbox Code Playgroud)

图例的顺序以相反的顺序出现(即从下到上)。我想将data.

我看到了此处为 java建议的选项。不确定如何在python中实现。

有人可以建议如何颠倒顺序吗?

编辑:在生成的图像中,图例的顺序是

B
A
Run Code Online (Sandbox Code Playgroud)

所需订单:

A
B
Run Code Online (Sandbox Code Playgroud)

sen*_*nce 17

您可以将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'})
)
Run Code Online (Sandbox Code Playgroud)

没有 traceorder 规范

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')
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

使用 traceorder 规范

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

Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

  • 仅供参考,“go.Legend”已被弃用,取而代之的是“go.layout.Legend” (5认同)

Ham*_*zah 11

您只能添加此行来反转图例标签的当前顺序:

fig.update_layout(legend_traceorder="reversed")
Run Code Online (Sandbox Code Playgroud)