O conceito do gráfico de barras circulares, também conhecido como gráfico de pista de corrida, é expressar as barras ao redor do centro de um círculo.
Cada barra começa no mesmo grau e se move na mesma direção.
Aquele mais próximo de completar a circunferência tem o maior valor.
Essa é uma boa ideia para chamar a atenção dos leitores.
A unidade da barra circular é "grau", indo de 0 a 360 graus, portanto 1% da circunferência equivale a 3,6 graus.
Os próximos ao centro terão um comprimento menor do que os distantes do centro, mas o percentual independe do comprimento da barra, mas do seu percentual em relação à circunferência completa.
Podemos criar gráficos de barras circulares combinando os pacotes Matplotlib, Seaborn e Pandas.
Importamos no dataframe df os dados do arquivo-csv "dados_paises.csv", da emissão de carbono dos países relacionados, com a função read_csv() do Pandas.
Clique aqui para baixar o arquivo, que está no formato-texto com codificação UTF-8.
Plotamos o gráfico com a função barh() do módulo matplotlib.pyplot.
Utilizamos a função color_palette() do pacote seaborn para retornar a paleta de cores utilizada com as barras circulares.
Analise o código observando o gráfico produzido.
Rode o código no programa-interpretador do Python ou no Jupyter-Lab e veja o gráfico gerado.
Baixe o arquivo-csv de países aqui
Importamos os pacotes que serão utilizados.
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import numpy as np
Atribuimos na variável df o dataframe retornado pela função read_csv(), carregando o arquivo dados_paises.csv contendo os dados de emissão de carbono dos países relacionados.
csv = "dados_paises.csv"
df = pd.read_csv(csv,encoding="UTF-8")
df_len = len(df)
print(df)
Verificamos o tipo do dataframe.
print(type(df))
Atribuimos na variável serie_paises a série no dataframe com os países.
serie_paises = df["País"]
print(serie_paises)
Verificamos o tipo da série.
print(type(serie_paises))
Atribuimos na variável serie_emissoes a série no dataframe com as emissões dos países.
serie_emissoes = df["Emissão"]
print(serie_emissoes)
Atribuimos na variável serie_porcentagens a série no dataframe com as porcentagens das emissões dos países.
serie_porcentagens = df["Porcentagem"]
print(serie_porcentagens)
Declaramos a função obter_paleta retornando a lista com a paleta de cores selecionada.
def obter_paleta(name, number):
paleta = list(sns.color_palette(palette=name, n_colors=number).as_hex())
return paleta
Declaramos a função show_grafico_barras_circulares para mostrar o gráfico de barras circulares coloridas.
O gráfico é gerado barra por barra, com customização das cores das barras e rótulos para legenda.
def show_grafico_barras_circulares(titulo,formato,serie_x,serie_y,nome_paleta):
# inicializações para o gráfico
tam = len(serie_x)
paleta = obter_paleta(nome_paleta,tam)
lista_y = list(serie_y)
plt.gcf().set_size_inches(12, 12)
sns.set_style("darkgrid")
#
# atribuir valor máximo
max_val = max(serie_y) * 1.0
#
# atribuir a projeção polar
ax = plt.subplot(projection="polar")
#
# atribuir as subplotagens
ax.set_theta_zero_location("N")
ax.set_theta_direction(1)
ax.set_rlabel_position(0)
ax.set_thetagrids([], labels=[])
ax.set_rgrids(range(tam), labels=serie_x)
#
# constantes usadas no laço
dois_pi = 2 * np.pi
k = dois_pi/max_val
#
# laço de barras circulares
for i in range(df_len):
lei = lista_y[i]
lb = formato.format(lei)
cor = paleta[i]
ax.barh(i,lei*k,label=lb,color=cor)
#
# título e legenda
plt.title(titulo,fontsize=16)
plt.legend(loc="upper right")
#
# mostrar o gráfico
plt.show()
Exemplo: paleta "viridis_r" cruzando países e valores de emissão:
tit1 = "Países x Valores de Emissão"
fmt1 = "{:.2f}"
show_grafico_barras_circulares(tit1,fmt1,serie_paises,serie_emissoes,"viridis_r")
Exemplo: paleta "plasma_r" cruzando países e valores de emissão:
show_grafico_barras_circulares(tit1,fmt1,serie_paises,serie_emissoes,"plasma_r")
Exemplo: paleta "Spectral" cruzando países e porcentagens dos valores de emissão:
tit2 = "Países x Porcentagens de Emissão"
fmt2 = "{:.2f}%"
show_grafico_barras_circulares(tit2,fmt2,serie_paises,serie_porcentagens,"Spectral")
Exemplo: paleta "hsv" cruzando países e porcentagens dos valores de emissão:
show_grafico_barras_circulares(tit2,fmt2,serie_paises,serie_porcentagens,"hsv")