Как в 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 находится в желаемом порядке в качестве словаря заказов, но мой график продолжает переключаться между позициями с помощью QUOTE и DEMO.

На самом деле не имеет значения, используется ли category_orders или нет, пробовал кучу стилей и упорядочений словарей, но, похоже, ни один из них не работает.

https://plotly.com/python-api-reference/generated/plotly.express.funnel.html category_orders (dict с ключами str и списком значений str (по умолчанию {})) - по умолчанию в Python 3.6+ порядок категориальных значений в осях, легендах и фасетах зависит от порядка, в котором эти значения впервые встречаются в data_frame (и в Python ниже 3.6 порядок не гарантируется по умолчанию). Этот параметр используется для принудительного упорядочивания значений в столбце. Ключи этого словаря должны соответствовать именам столбцов, а значения должны быть списками строк, соответствующих конкретному желаемому порядку отображения.

Вот DataFrame с проблемой внизу с демонстрацией и QUOTE

Проверьте изображение моей воронки здесь. Последовательность воронки с неправильным порядком следования


person Richard Steefanhöffen    schedule 20.12.2020    source источник
comment
Можете ли вы добавить свой фрейм данных к вопросу?   -  person Maximilian Peters    schedule 20.12.2020
comment
i.stack.imgur.com/Macf7.png вот оно!   -  person Richard Steefanhöffen    schedule 21.12.2020
comment
Спасибо! Если вы добавите код / ​​текст к своему вопросу, я уверен, что кто-то может вам помочь.   -  person Maximilian Peters    schedule 21.12.2020


Ответы (1)


На мой взгляд, проблемы вызваны разницей в том, как 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')

введите описание изображения здесь

person Maximilian Peters    schedule 21.12.2020