在情节中自定义图例的顺序

Posted

技术标签:

【中文标题】在情节中自定义图例的顺序【英文标题】:Customizing the order of legends in plotly 【发布时间】:2019-11-10 12:25:42 【问题描述】:

我正在尝试自定义图例的顺序,同时在 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')

图例的顺序以相反的顺序出现(即从下到上)。我想将data中相应项目的顺序从上到下更改。

我看到为 java 建议的选项 here。不知道如何在python中实现。

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

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

B
A

想要的顺序:

A
B

【问题讨论】:

您能否提供一张代表您获得的结果和您想要实现的目标的图片? @sentence 请检查编辑 【参考方案1】:

您可以使用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')

带有跟踪顺序规范

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

【讨论】:

仅供参考 go.Legend 已被弃用,取而代之的是 go.layout.Legend

以上是关于在情节中自定义图例的顺序的主要内容,如果未能解决你的问题,请参考以下文章

ggplot2 中图例的自定义顺序,因此它与图中因子的顺序不匹配

如何在 ggplot2 中自定义图例?

在情节提要中自定义表格视图单元格时出现 NSInternalInconsistencyException

在 LabelEncoder 中自定义

如何在导航控制器中自定义工具栏

R:将自定义图例添加到 ggplot