在 Plotly Express Funnel 中,您如何重新排序 de y 轴类别?

In Plotly Express Funnel how do you re-order de y-axis categories?

我有一个包含我所有数据的 DataFrame,我有以下阶段顺序

order = {0:'NEW',1:'FOLLOW_UP',2:'Demo',3:'QUOTE',4:'CLOSING'}
fig = px.funnel(df, x='count', y='name', color='source',category_orders=order)

我的 DataFrame 与 Order 字典完全符合所需的 Order,但我的图表一直在使用 QUOTE 和 DEMO 切换位置。

其实用不用category_orders都没有区别,试了一堆字典的样式和排列,但none好像还可以。

https://plotly.com/python-api-reference/generated/plotly.express.funnel.html category_orders (dict with str keys and list of str values (default {})) – 默认情况下,在 Python 3.6+ 中,轴、图例和构面中分类值的顺序取决于这些值在 data_frame 中首次遇到(在 3.6 以下的 Python 中默认不保证顺序)。此参数用于强制对每列的值进行特定排序。这个字典的键应该对应于列名,值应该是与所需的特定显示顺序对应的字符串列表。

Here is the DataFrame with the issue at the Bottom with Demo and QUOTE

在此处查看我的漏斗图片 Funnel with wrong order by plotly

在我看来,问题是由 Ploty 期望输入数据的外观和您的数据框的外观不同造成的。

漏斗图似乎期望出现在漏斗末端的所有类别都出现在之前的每个阶​​段。您的 Closing source 不存在 QUOTE 并且 QUOTE 中的值在 Demo 中丢失。如果将这两个值相加,顺序应该是正确的。

import plotly.express as px
import pandas as pd
import io

data = '''count name    source
0   NEW IG
2   NEW 0
1   NEW GCLID
1   NEW UTM
1   NEW UTM
1   NEW GCLID
1   NEW GLCID
7   NEW UTM
1   NEW GLCID
1   NEW GCLID
2   NEW 123
1   NEW GCLID
1   NEW GCLID
1   NEW FB
1   NEW FBCLID
1   NEW UTM
1   NEW UTM
1   NEW DATA
1   NEW R
1   NEW GCLID
11  NEW FB
1   NEW FB
7   NEW FB
1   NEW FB
1   NEW GCLID
1   NEW GCLID
1   NEW GCLID
1   FOLLOW_UP   FB
2   FOLLOW_UP   FB
1   FOLLOW_UP   0
1   FOLLOW_UP   IG
1   FOLLOW_UP   FB
1   FOLLOW_UP   FB
1   FOLLOW_UP   FB
2   FOLLOW_UP   123
3   DEMO    FB
1   QUOTE   123
1   QUOTE   123
2   QUOTE   123
3   CLOSING FB'''.splitlines()

df = pd.read_csv(io.StringIO('\n'.join(data)), sep='\t')
px.funnel(df, x='count', y='name', color='source')

# incorrect order

# 正确顺序

data.insert(-5, '0\tDEMO\t123')
data.insert(-2, '0\tQUOTE\tFB')
df = pd.read_csv(io.StringIO('\n'.join(data)), sep='\t')
px.funnel(df, x='count', y='name', color='source')