Меняйте цвета в 100% — ной графической диаграмме, построенной на основе python

#python #pandas #plotly #bar-chart

Вопрос:

Я пытаюсь изменить цвета 100% — ного сюжета диаграммы барчарта в сюжетно.

У меня есть следующий фрейм данных и код:

 import pandas as pd
import plotly
import plotly.express as px
from plotly.offline import plot

df = pd.DataFrame([["A", "Jan", "20%"],
                   ["A", "Fev", "10%"],
                   ["A", "Mar", "15%"],
                   ["A", "Apr", "10%"],
                   ["B", "Jan", "15%"],
                   ["B", "Fev", "15%"],
                   ["B", "Mar", "20%"],
                   ["B", "Apr", "10%"],
                   ["C", "Jan", "25%"],
                   ["C", "Fev", "25%"],
                   ["C", "Mar", "20%"],
                   ["C", "Apr", "30%"],
                   ["D", "Jan", "40%"],
                   ["D", "Fev", "50%"],
                   ["D", "Mar", "45%"],
                   ["D", "Apr", "50%"]],
                  columns=["type", "month", "percentage"])

colors = plotly.colors.qualitative.Prism

fig=px.bar(df, x='month', y='percentage',
            color=df['type'], barmode ='stack', 
            text = df['percentage'])


fig.update_traces(textfont_size=12, marker_color = colors)

fig.update_layout(title = {'text': "Title",
                           'x':0.5, 'xanchor': 'center'},
                  title_font_size=30,
                  legend=dict(yanchor="bottom", y=0.0, 
                              xanchor="right", x=1.2),
                  legend_font_size=16, 
                  xaxis_title = 'Months', 
                  yaxis_title ='%',
                  xaxis_tickangle=-45,
                  width = 1000, height = 600)
fig.show()
 

Но я получаю следующее:
Наложенная штрих-карта-неправильный цвет

Изменение цветов целых полос вместо изменения цветов для каждой секции полос.

Что я хочу, так это изменить синий, красный, зеленый, фиолетовый цвет с оригинального:

Наборная штрих-карта-оригинал

(Это то , что я получаю, когда нет marker_color = colors входа fig.update_traces , пытаясь изменить цвета так, как я хочу.)

Как я могу сделать это правильно?

Ответ №1:

Установите color_discrete_sequence аргумент px.bar вместо marker_color в update_traces :

 colors = plotly.colors.qualitative.Prism

fig = px.bar(df, x='month', y='percentage',
             color=df['type'], barmode='stack',
             text=df['percentage'].astype(str)   '%',  # Add Percent Sign
             color_discrete_sequence=colors)

# Don't forget to remove from update_traces
fig.update_traces(textfont_size=12)
 

стилизованный сюжет

Данные и импорт (удалены строковые проценты, так как они были построены неправильно):

 import pandas as pd
import plotly
import plotly.express as px

df = pd.DataFrame([["A", "Jan", 20],
                   ["A", "Fev", 10],
                   ["A", "Mar", 15],
                   ["A", "Apr", 10],
                   ["B", "Jan", 15],
                   ["B", "Fev", 15],
                   ["B", "Mar", 20],
                   ["B", "Apr", 10],
                   ["C", "Jan", 25],
                   ["C", "Fev", 25],
                   ["C", "Mar", 20],
                   ["C", "Apr", 30],
                   ["D", "Jan", 40],
                   ["D", "Fev", 50],
                   ["D", "Mar", 45],
                   ["D", "Apr", 50]],
                  columns=["type", "month", "percentage"])
 

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

1. Большое вам спасибо @Henry Ecker! У меня было обновление для plotly, и внезапно проценты не отображались правильно (не было 100% на бар). Я попробую этот подход.