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

问题描述

我有一个包含所有数据的 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实际上没有区别,尝试了一堆字典样式和排列但似乎都不起作用。

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 中首次遇到的顺序(并且在 Python 3.6 以下认情况下不保证顺序)。此参数用于强制对每列的值进行特定排序。这个字典的键应该对应列名,值应该是与所需的特定显示顺序对应的字符串列表。

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

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

解决方法

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

漏斗图似乎期望出现在漏斗末端的所有类别都出现在每个前一阶段。您的 Closing source 不存在 QUOTEQUOTE 中缺少您来自 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

enter image description here # 正确顺序

data.insert(-5,'0\tDEMO\t123')
data.insert(-2,'0\tQUOTE\tFB')
df = pd.read_csv(io.StringIO('\n'.join(data)),color='source')

enter image description here

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...