Плотный параллельный график дает неправильную классификацию после указания параметра цвета

#python #plotly

Вопрос:

У меня есть фрейм данных с категориальными столбцами и целевой столбец с двумя категориями — 0 и 1.

 dfx.target.value_counts()
0    8062
1    3919
Name: target, dtype: int64
 

Я попытался создать для них параллельный график с помощью plotly, это отлично работает, я вставляю вывод моего целевого столбца:

 fig = px.parallel_categories(dfx)
fig.show()
 

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

Затем я попытался закодировать их цветом, чтобы, согласно документации, мы могли указать имя столбца.

 fig = px.parallel_categories(dfx, color = 'target')
fig.show()
 

однако, указывая цветовую схему — что можно сделать, используя имя столбца, я получаю неправильное распределение в целевом столбце : введите описание изображения здесь

Дополнительная категория отображается серым цветом, кроме того, количество 0 и 1 в целевом столбце неверно.

Примечание: В данных нет na

Обновление: Оказывается, это была проблема с версией. После обновления пакета я смог это сделать.

Ответ №1:

  • создали образец набора данных для построения
  • следуя вашему коду, указывая color="target" вызванные ошибки, недопустимые цвета
  • изменено, чтобы использовать серию панд map() для построения серии целевого значения в цвет
  • требуется добавить dimensions параметр, чтобы цвет не был добавлен в качестве дополнительной категории в трассировке.
  • распределения идентичны с использованием color параметра или без него
 import pandas as pd
import numpy as np
import plotly.express as px

# build a dataframe for use in plot
V=6
a = [chr(i) for i in range(ord("A"), ord("A") V)]
R=2000
dfx = pd.DataFrame({c:np.random.choice(a[0:V//(i 1)], R) for i, c in enumerate(["source","interim","target"])})

# the plot - use "target" for colors
px.parallel_categories(
    dfx,
    dimensions=dfx.columns,
    color=dfx["target"].map(
        {
            l: px.colors.qualitative.Light24[i % len(px.colors.qualitative.Light24)]
            for i, l in enumerate(dfx["target"].unique())
        }
    ),
)

 

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

Комментарии:

1. Спасибо @Rob , после нескольких часов изучения я также реализовал аналогично. Я поддержал ваш ответ, не принятый, так как моя проблема заключалась в более старой версии пакета. Кроме того, знаете ли вы, как мы можем стилизовать категории? Я могу сделать это в go.parcats с помощью labelfont, но я ничего не могу найти для px.parallel_categories. Спасибо!

2. px.parallel_categories().update_traces(labelfont={"size":26}) который использует графические объекты поверх структуры px