0

我有一个包含所有数据的 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 字典所需的顺序,但我的图表不断使用 QUOTE 和 DEMO 切换位置。

是否使用 category_orders 实际上没有区别,尝试了一堆字典样式和排列但似乎没有一个工作。

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

这是带有 Demo 和 QUOTE 的底部问题的 DataFrame

在这里检查我的漏斗图像 漏斗 顺序错误 by plotly

4

1 回答 1

0

在我看来,这些问题是由 Ploty 期望输入数据的外观和数据框的外观不同引起的。

漏斗图似乎期望在漏斗末端出现的所有类别都出现在之前的每个阶​​段。你Closing source的不存在QUOTE,你的价值QUOTEDemo. 如果添加这两个值,则顺序应该是正确的。

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

在此处输入图像描述

于 2020-12-21T21:49:12.733 回答