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

Вот датафрейм с проблемой внизу с демо и ЦИТАТА

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

Можете ли вы добавить свой фрейм данных к вопросу?

Maximilian Peters 20.12.2020 20:58
i.stack.imgur.com/Macf7.png вот оно!
Richard Steefanhöffen 20.12.2020 23:42

Спасибо! Если вы добавите код/текст к своему вопросу, я уверен, что кто-нибудь сможет вам помочь.

Maximilian Peters 20.12.2020 23:44
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
821
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

На мой взгляд, проблемы вызваны разницей в том, как Ploty ожидает, что входные данные будут выглядеть, и как выглядит ваш фрейм данных.

Графики воронки, кажется, предполагают, что все категории, присутствующие в конце воронки, присутствуют на каждом предыдущем этапе. Ваш Closingsource отсутствует 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')

Другие вопросы по теме