在传递颜色时保留 Plotly Python 中的原始条形顺序

Max*_*nis 6 python pandas plotly plotly-python

在不使用时,使用 Plotly 绘制条形图可以保留数据集的顺序color

import pandas as pd
import plotly.express as px

df = pd.DataFrame({'val': [1, 2, 3],
                   'type': ['b', 'a', 'b']},
                  index=['obs1', 'obs2', 'obs3'])
px.bar(df, 'val')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述color重新排序数据:

px.bar(df, 'val', color='type')
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何在使用colorarg 时保留原始顺序?

这类似于如何在 R Plotly 条形图中使用颜色变量保留所需的顺序,但我使用的是 Python 而不是 R。

Dan*_*ejo 8

您可以使用该category_orders参数:

import pandas as pd
import plotly.express as px

df = pd.DataFrame({'val': [1, 2, 3],
                   'type': ['b', 'a', 'b']},
                  index=['obs1', 'obs2', 'obs3'])
fig = px.bar(df, 'val', color='type', category_orders={'index': df.index[::-1]})
fig.show()
Run Code Online (Sandbox Code Playgroud)

输出

在此输入图像描述

文档中:

此参数用于强制每列值的特定顺序。该字典的键应与列名相对应,值应是与所需的特定显示顺序相对应的字符串列表。

通过查看代码,它似乎color被用作分组属性,因此这可能就是发生重新排序的原因。


小智 5

我真的不知道为什么plotly express 这样做,但您可以使用解决方法,即使用数组对 yaxis 重新排序fig.update_layout( yaxis={'categoryorder':'array', 'categoryarray':df.index})

import pandas as pd
import plotly.express as px

df = pd.DataFrame({'val': [1, 2, 3],
                   'type': ['b', 'a', 'b']},
                  index=['obs1', 'obs2', 'obs3'])
fig=px.bar(df, x='val',y=df.index, orientation='h')


fig=px.bar(df, x='val',y=df.index, color='type', orientation='h')
fig.update_layout( yaxis={'categoryorder':'array', 'categoryarray':df.index})
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述