#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