Как задать определенный цвет для некоторых полосок на линейчатой диаграмме?

#python #colors #plotly #bar-chart #plotly-python

Вопрос:

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

 import plotly.express as px
import pandas as pd

data = {'Name':['2020/01', '2020/02', '2020/03', '2020/04',  
         '2020/05', '2020/07', '2020/08'],  
        'Value':[34,56,66,78,99,55,22]}
df = pd.DataFrame(data)

color_discrete_sequence = ['#ec7c34']*len(df)
color_discrete_sequence[5] = '#609cd4'
fig=px.bar(df,x='Name',y='Value',color_discrete_sequence=color_discrete_sequence)
fig.show()
 

Мои ожидания состояли в том, что один (шестой) бар имел другой цвет, однако я получил этот результат:

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

Что я делаю не так?

Ответ №1:

Это происходит потому color , что in px.bar используется для обозначения категории для иллюстрации признаков или измерений набора данных с использованием цветовой шкалы. Или в вашем случае, скорее, цветовой цикл, поскольку вы имеете дело с категориальным / дискретным случаем. color_discrete_sequence затем используется для указания последовательности цветов, которой следует следовать. Один из способов достижения вашей цели, используя ваши настройки здесь, состоит в том , чтобы просто определить строковую переменную с уникальными значениями, например, как df['category'] [str(i) for i in df.index] , а затем использовать:

 fig=px.bar(df,x='Name',y='Value',
           color = 'category',
           color_discrete_sequence=color_discrete_sequence,
           )
 

Сюжет:

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

Если df['category'] это числовое значение, color_discrete_sequence будет проигнорировано, и будет применена непрерывная последовательность по умолчанию:

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

Если что-то еще неясно, не стесняйтесь, дайте мне знать.

Полный код:

 import plotly.express as px
import pandas as pd

data = {'Name':['2020/01', '2020/02', '2020/03', '2020/04',  
         '2020/05', '2020/07', '2020/08'],  
        'Value':[34,56,66,78,99,55,22]}
df = pd.DataFrame(data)
df['category'] = [str(i) for i in df.index]
# df['category'] = df.index

color_discrete_sequence = ['#ec7c34']*len(df)
color_discrete_sequence[5] = '#609cd4'
fig=px.bar(df,x='Name',y='Value',
           color = 'category',
           color_discrete_sequence=color_discrete_sequence,
           )
fig.show()
 

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

1. Ткс, вестланд. Один вопрос: почему (я попробовал) это не работает, если я установил color = ‘Имя’? В конце концов, это строковое поле.

2. Каков был результат?

3. То же самое с фотографией, которую я разместил в вопросе.

4. Ибп, извини. Моя ошибка, это работает. Снова Ткс!

5. Не за что! Пожалуйста, подумайте о том, чтобы отметить мое предложение как принятый ответ. И, возможно, даже рассмотрите возможность повышения голоса, если это было полезно для вас.