在 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')
我有一个包含我所有数据的 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')