1
resposta

[Dúvida] Labels nas barras

No segundo desafio do módulo "03. Compondo dados dinâmicos", devemos filtrar - segundo o enunciado - a região Norte, no entando, na resolução do exercicio está filtrando a região Centro-Oeste.

Segui com o enunciado e me deparei com o seguinte gráfico:

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeAs labels descritas em cada barra estão sobrepostas umas nas outras. Na aula não foi ensinado a como resolver este tipo de desafio, como posso melhorar o meu gráfico? Realizando um filtro para colocar o texto apenas se for maior que certo valor? Ou existe outra maneira de descrever os valores?

1 resposta

Olá, Igor! Como vai?

Você tem razão, obrigada por nos dar visibilidade para esse problema. Já encaminhei a situação para o time responsável.

Gostei muito do seu raciocínio para resolver o problema. Para ajudar você, trouxe duas ideias de soluções. Vou detalhá-las logo abaixo:

→ Você pode rotacionar as labels do eixo x e reduzir o tamanho da fonte, fazendo ajustes conforme desejar, como no exemplo abaixo:

# Gráfico da região Norte

def grafico_va():
    # Área do gráfico e tema da visualização
    fig, ax = plt.subplots(figsize=(12,7))

    # Definindo as cores do gráfico
    cores = [AZUL3, LARANJA1, CINZA5, VERDE3]

    # Gerando o gráfico de barras empilhadas 100%
    df_n_estados.plot(kind="barh", stacked=True, color=cores, ax=ax)

    # Personalizando o gráfico
    plt.suptitle('Valores adicionados de bens e serviços da região Norte do Brasil em 2020', size=14, 
                 color=CINZA1, ha='left', x=0, y=1.1, transform=ax.transAxes)
    plt.title('Em bilhões de reais', fontsize=12, color=CINZA3, ha="left", x=0, y=1.03, transform=ax.transAxes)
    ax.legend(bbox_to_anchor=(1, 1), bbox_transform=ax.transAxes, fontsize=10, loc='upper left')
    ax.set_ylabel('')
    ax.set_xticklabels([])
    ax.yaxis.set_tick_params(labelsize=10, color=CINZA2)
    ax.set_frame_on(False)

    # remover todos os ticks do eixo x e y
    ax.tick_params(axis='both', which='both', length=0)

    # Valores das barras com rotação
    for container in ax.containers:
        labels = [f'{valor.get_width()/1e9:.0f} Bi' for valor in container]
        ax.bar_label(container, label_type='center', labels=labels, size=6, color=CINZA2, fontweight='bold', rotation=45)

    return ax, cores

ax, cores = grafico_va()

→ Você pode aumentar a largura do gráfico ajustando o figsize e reduzir o tamanho da fonte, como no exemplo abaixo:

import matplotlib.pyplot as plt

def grafico_va():
    # Área do gráfico e tema da visualização
    fig, ax = plt.subplots(figsize=(26,10))  # Aumentei o tamanho da figura

    # Definindo as cores do gráfico
    cores = [AZUL3, LARANJA1, CINZA5, VERDE3]

    # Gerando o gráfico de barras empilhadas 100%
    df_n_estados.plot(kind="barh", stacked=True, color=cores, ax=ax)

    ## Personalizando o gráfico
    plt.suptitle('Valores adicionados de bens e serviços da região Norte do Brasil em 2020', size=14, 
                 color=CINZA1, ha='left', x=0, y=1.1, transform=ax.transAxes)
    plt.title('Em bilhões de reais', fontsize=16, color=CINZA3, ha="left", x=0, y=1.03, transform=ax.transAxes)
    ax.legend(bbox_to_anchor=(1, 1), bbox_transform=ax.transAxes, fontsize=10, loc='upper left')
    ax.set_ylabel('')
    ax.set_xticklabels([])
    ax.yaxis.set_tick_params(labelsize=10, color=CINZA2)
    ax.set_frame_on(False)

    # Remover todos os ticks do eixo x e y
    ax.tick_params(axis='both', which='both', length=0)

    # Valores das barras
    for container in ax.containers:
        labels = [f'{valor.get_width()/1e9:.0f} Bi' for valor in container]
        ax.bar_label(container, label_type='center', labels=labels, size=6, color=CINZA2, fontweight='bold')

    return ax, cores

ax, cores = grafico_va()

→ Além disso, você pode combinar as duas sugestões de acordo com a sua preferência.

Espero ter ajudado!

Abraço ✨

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!