Как передать кортежи RGB в `px.bar`?

Вам нужен so_sample.parquet для запуска кода

Мне нужно воспроизвести этот гистограмму на графике и, что наиболее важно, иметь возможность предварительно выбирать цвета случайным образом таким же образом.

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd

df = pd.read_parquet('so_sample.parquet')
df = df.groupby(['col1', 'col2']).size().unstack().fillna(0)
df.plot(
    kind='bar',
    stacked=True,
    legend=False,
    xlabel='',
    rot=0,
    color=np.random.uniform(0, 1, (df.shape[1], 3)),
)

Как передать кортежи RGB в `px.bar`?

Вот что я сделал до сих пор:

import plotly.express as px

df = pd.read_parquet('so_sample.parquet')
df = df.groupby(['col1', 'col2']).size().reset_index(name='count')
px.bar(
    df,
    x='col1',
    y='count',
    color='col2',
).show()

Как передать кортежи RGB в `px.bar`?

Я пробовал пройти color_discrete_sequence=[color1, color2, ...], и это не имеет никакого значения.

Почему в 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
0
30
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Формат данных, используемый в matplotlib, является широким форматом, но в графике это длинный формат. plotly должен быть такого же широкого формата, и вы можете указать свою любимую палитру. Я выбрал Dark24, в котором большое количество цветов.

import plotly.express as px
import pandas as pd

df = pd.read_parquet('./data/so_sample.parquet')
#df = df.groupby(['col1', 'col2']).size().reset_index(name='count')
df = df.groupby(['col1', 'col2']).size().unstack().fillna(0)

px.bar(
    df,
    x=df.index,
    y=df.columns.tolist(),
    color_discrete_sequence=px.colors.qualitative.Dark24,
).show()

Мне нужно либо знать, какие цвета были присвоены каким значениям в df.columns, либо иметь возможность указывать цвета так же, как в matplotlib. Кроме того, кажется, что цвета повторяются, так как верхний стек (зеленый) имеет значение -136 в легенде, а его фактическое значение — какое-то 7-значное число, что означает, что в стеке есть еще один зеленый (то же самое происходит с matplotlib , но мне это не нравится)

sK500 03.05.2022 15:58

Цвета и имена столбцов показаны в легенде, но что еще вы имеете в виду?

r-beginners 03.05.2022 16:02

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

sK500 03.05.2022 16:04

Цветов, естественно, 24, поэтому, если цветов больше 24, процесс будет повторяться. Здесь используются следующие цвета. ['#2E91E5', '#E15F99', '#1CA71C', '#FB0D0D', '#DA16FF', '#222A2A', '#B68100', '#750D86', '#EB663B', '#511CFB', '#00A08B', '#FB00D1', '#FC0080', '#B2828D', '#6C7C32', '#778AAE', '#862A16', '#A777F1', '#620042', '#1616A7', '#DA60CA', '#6C4516', '#0D2A63', '#AF0038']

r-beginners 03.05.2022 16:06
print(px.colors.qualitative.Dark24) Теперь вы можете получить его.
r-beginners 03.05.2022 16:07

Я знаю, и я проверил их сразу после того, как вы опубликовали свой ответ, повторение вводит в заблуждение, и, как я указал в вопросе, мне нужно предварительно выбрать цвета или каким-то образом иметь 99 разных цветов.

sK500 03.05.2022 16:09

Затем я сгенерирую случайные шестнадцатеричные цвета вместо px.colors, я думаю, это решит проблему, неважно, тогда, спасибо.

sK500 03.05.2022 16:13

У меня нет списка из 99 цветов, поэтому я не могу попробовать, но в справке сказано, что это список букв, так что это возможно. Пожалуйста, попробуйте это для сюжетных пользователей.

r-beginners 03.05.2022 16:21

Еще раз спасибо, вместо этого я буду генерировать случайные шестнадцатеричные значения, которые должны решить проблему.

sK500 03.05.2022 16:23

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