1
resposta

Desafio: gráficos de composição - Poucos períodos-Desafio 2

Desafio 2

AZUL1, AZUL2, AZUL3, AZUL4, AZUL5, AZUL6 = '#174A7E', '#4A81BF', "#6495ED", '#2596BE', '#94AFC5', '#CDDBF3'
CINZA1, CINZA2, CINZA3, CINZA4, CINZA5, BRANCO = '#231F20', '#414040', '#555655', '#A6A6A5', '#BFBEBE', '#FFFFFF'
VERMELHO1, VERMELHO2, LARANJA1 = '#C3514E',	'#E6BAB7',	'#F79747'
VERDE1, VERDE2, VERDE3 = '#0C8040',	'#9ABB59', '#9ECCB3'

df_co = df.copy()
df_co = df_co.query("regiao == 'Centro-Oeste' and ano == 2020")[ ['sigla_uf','va_servicos', 'va_industria', 'va_adespss', 'va_agropecuaria']]
df_co = df_co.sort_values('va_servicos', ascending = True)
df_co = df_co.set_index('sigla_uf')
df_co

import matplotlib.pyplot as plt
import seaborn as sns

fig, ax = plt.subplots(figsize = (16,6))
sns.set_theme(style = 'white')

fig.suptitle('Distribuição dos Valores dos Bens e Serviços da Região Centro-Oete (2020)',
             fontsize = 18, color = CINZA2, ha = 'right',x = 0.7,  y = 1)

cores = [CINZA3, VERMELHO1, AZUL2, VERDE1]
df_co.plot( kind = 'barh', stacked = True, color = cores, ax = ax)

ax.set_xlabel('')
ax.set_ylabel('')
ax.set_xticklabels([])
ax.yaxis.set_tick_params(labelsize=14, color = CINZA2)
ax.set_frame_on(False)


for container in ax.containers:
      labels = [f'{valor.get_width()/1e9:.2f} Bi' for valor in container]
      ax.bar_label(container, label_type='center', labels = labels, size = 10, color = BRANCO, fontweight='bold')

from matplotlib import transforms

def texto_colorido(x, y, texto, cores, esp=20, ax=None, **kw):
    cores = list(reversed(cores))
    t = ax.transData
    canvas = ax.figure.canvas

    for i, linha in enumerate(reversed(texto.split('\n'))):
        frases = linha.split('||')
        for s, cor in zip(frases, cores[i]):
            texto = ax.text(x, y, s, color=cor, transform=t, **kw)
            texto.draw(canvas.get_renderer())
            ex = texto.get_window_extent()
            t = transforms.offset_copy(texto._transform, x=ex.width,
                                       units='dots')

        t = transforms.offset_copy(ax.transData, x=0, y=(i + 1) * esp, units='dots')

ax.legend().remove()   
texto_colorido(0, 3.4, '$\\bf{Serviços}$ || | || $\\bf{Indústria}$ || | || $\\bf{ADESPSS}$ || | || $\\bf{Agropecuária}$',
               cores = [[cores[0], CINZA3, cores[1], CINZA3, cores[2], CINZA3, cores[3]]], ax=ax, fontsize=12) 

texto_colorido(
    250e9, 1,                                                             
    'O ||$\\bf{Distrito\ Federal}$|| obteve no Centro-Oeste as maiores contribuiçoes\n'
    'nos setores :$\\bf{serviços}$|| e ||$\\bf{ADESPSS\ (Administração,\ Defesa,\ Educação,}$\n'
    '$\\bf{Saúde\ Pública\ e\ Seguridade\ Social)}$|| e pouco expressivo no setor da\n'
    '$\\bf{agropecuária}$.\n'
    '\n'
    '$\\bf{Goiás}$|| foi o estado com maior participação em ||$\\bf{indústria}$|| e ||$\\bf{Mato\ Grosso}$\n'
    'em ||$\\bf{agropecuária}$||.\n'
    '\n'
    'O ||$\\bf{Mato\ Grosso\ do\ Sul}$||, fica abaixo dos outros Estados ultrapassando  o\n'
    '$\\bf{Distrito\ Federal}$|| em somente dois setores: ||$\\bf{indústria}$|| e ||$\\bf{agropecuária}$ ||.',
    [[CINZA3, CINZA1, CINZA3],                     # linha 1                          # cores
     [CINZA1,CINZA3, AZUL3, CINZA3],                      # linha 2
     [AZUL3, CINZA3],
     [VERDE1, CINZA3],
     [CINZA3],                                     # linha 4
     [CINZA1, CINZA3, VERMELHO1, CINZA3, CINZA1],   # linha 5
     [CINZA3, VERDE1, CINZA3],                     # linha 6
     [CINZA3],                                     # linha 7
     [CINZA3, CINZA1, CINZA3],     # linha 8
     [CINZA1, CINZA3, VERMELHO1, CINZA3, VERDE1, CINZA3],   # linha 9
    ],
    esp=22,         
    ax=ax,          
    fontsize=12)



plt.show()

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Ficou sensacional, Marcia.

Parabéns!!