SÉRIE DE GRÁFICOS: GRÁFICO DE BARRAS CIRCULAR
Olá, Letícia da Minha Estatística aqui :). Click here to go to the post in English.
Essa semana para a Série de Gráficos temos o Gráfico de Barras Circular!
Os gráficos circulares são uma excelente escolha para visualizar dados quando queremos enfatizar padrões cíclicos ou relações de uma forma visualmente atraente. Eles são particularmente útil para representar dados baseados no tempo, como meses e estações; conjunto de dados com variáveis categóricas organizadas em um formato circular são utilizados para rankear dados. Ao colocar as barras em um formato circular, esses gráficos podem tornar padrões e tendências mais fáceis de identificar, além de adicionar uma dimensão estética que pode destacar sua visualização. No entanto, é importante garantir que o design mantenha-se limpo e fácil para interpretação da audiência.
Eles podem não conter tanta informação como você poderia desejar que um gráfico tenha estatisticamente. Como exemplo, os próximos gráficos ilustram o conjunto de dados birthwt da biblioteca do R MASS; eles mostram como os dados são divididos em grupos de "Raça", mas não dão tanta informação quanto um boxplot ou um histograma. Os gráficos a seguir foram criados em Python e em R, respectivamente.
Enquanto são visualmente atraentes, os gráficos circulares dificultam o discenimento de aspectos importantes dos dados, como qual barra é maior, e não têm a capacidade de exibir medidas estatísticas chaves, como medianas ou distribuições. Para esses gráficos, é importante que o tamanho do círculo interno seja grande o suficiente; caso contrário, as barras podem parecer assimétricas e distorcidas, refletindo de forma imprecisa as observações ou os dados.
O boxplot e o histograma fornecem estatísticas mais úteis para análise, como a mediana e os quartis para o boxplot, e a distribuição dos dados para o histograma. Para obter insights mais profundos, combinar gráficos circulares com gráficos complementares, como gráficos de linha, histogramas ou boxplots, pode oferecer uma compreensão e análise mais abrangente dos seus dados
O gráfico circular pode ser útil se tiver dados cíclicos, isto é, se seus dados exibem peridiocidade, assim como as horas do dia, dias, meses, estações e até direções de compasso. Pode ser aplicado, por exemplo, para analizar padrões de gastos dos consumidores com o decorrer do tempo para identificar picos, ou, em negócios, para destacar quais dias tiveram mais e a menos produtividade. Gráficos de barra circulares são excelentes para fornecer e entregar uma visão rápida e visualmente envolvente de tendências periódicas!
Para mostrar como criar esse gráfico eu escolhi o conjunto de dados AirPassengers, que é uma série temporal que contém dados mensais do número de passageiros de 1949 a 1960. Vamos começar!
1) Gráfico em R
Começe por carregar as bibliotecas necessárias, assim como o conjunto de dados:
# Carregar as bibliotecas e os dados
library(ggplot2)
data("AirPassengers") # Dados em série temporal
Como o conjunto de dados é uma série temporal, precisamos converter para um dataframe e também realizar alguns ajustes às variáveis, como converter a variável "mes" para uma categoria.
# Converte os dados para dataframe
airpassenger_data <- data.frame(
mes = rep(1:12, length.out = length(AirPassengers)),
passageiros = as.numeric(AirPassengers)
)
# Preparar os dados
airpassenger_data$mes <- factor(airpassenger_data$mes,
levels = 1:12,
labels = c("Jan", "Fev", "Mar", "Abr", "Mai", "Jun",
"Jul", "Ago", "Set", "Out", "Nov", "Dez"))
Agora, para criar o gráfico, o pacote ggplot2 vai ser usado com sua função base juntamente com a função geom_bar. O argumento stat = "identity" na função significa que as barras são equivalentes aos valores dos dados, enquanto stat = "count" define as barras para o número de ocorrências de cada valor de x, ajustando a altura das barras com base na sua frequência.
ggplot(airpassenger_data, aes(x = mes, y = passageiros, fill = mes)) +
geom_bar(stat = "identity", color = "black", alpha = 0.7, width = 1) +
coord_polar(start = 0) + # Deixa o gráfico circular
labs(title = "Passageiros Mensais de Avião",
x = "Mês",
y = "Número de Passageiros",
fill = "Mês") +
theme_minimal() +
theme(
axis.title = element_blank(), # Remove os títulos dos eixos
plot.title = element_text(hjust = 0.5) # Centraliza o título
)
A função coord_polar tranforma o gráfico em um sistema de coordenadas polar. Por padrão,geom_bar gera gráficos em um sistema de coordenadas cartesianas (ou seja, eixos x e y formando uma grade retangular). Remover coord_polar() resulta em um histograma comum em vez de um circular, como mostra o próximo código e gráfico. A função geom_bar permanece a mesma, incluindo seus argumentos.
ggplot(airpassenger_data, aes(x = mes, y = passageiros, fill = mes)) +
geom_bar(stat = "identity", color = "black", alpha = 0.7) +
labs(title = "Passageiros Mensais de Avião",
x = "Mês",
y = "Número de Passageiros",
fill = "Mês") +
theme_minimal()
Agora, para uma análise mais detalhada, também é possível criar um boxplot. Ao mudar a função geom_bar para geom_boxplot você gera um boxplot. Neste caso, não há necessidade de identificar o argumento stat, porque, enquanto histogramas fornecem melhor insights sobre a distribuição dos dados, o boxplot vai destacar a mediana de cada categoria, assim como seus quartis, além de revelar outliers, caso existam.
ggplot(airpassenger_data, aes(x = mes, y = passageiros, fill = mes)) +
geom_boxplot(color = "black", alpha = 0.7) +
labs(title = "Passageiros Mensais de Avião",
x = "Mês",
y = "Número de Passageiros",
fill = "Mês") +
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5) # Center title
)
Tendo explorado como criar essas visualizações em R, nós podemos mudar agora para Python e aprender como gerar os mesmos gráficos usando matplotlib para o gráfico circular e seaborn para o histograma e boxplot! Então, vamos passar pelo processo de replicar esses gráficos em Python.
2) Gráfico em Python
Para criar o gráfico circular em Python, as principais bibliotecas necessárias são pandas para importar, limpar e organizar os dados em um dataframe, numpy, que é essencial para operações numéricas, como gerar arrays e trabalhar com ângulos para criar o gráfico circular, e matplotlib, que é a biblioteca principal para criação de gráficos. Adicionalmente a biblioteca seaborn vai ser usada para a paleta de cores e criar o histograma e o boxplot
# Importar as bibliotecas necessárias
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sea
Com essa configuração, você poderá carregar e importar o conjunto de dados independentemente do interpretador que estiver usando. Para carregar o conjunto de dados, use pd.read_csv, e depois siga os passos para convertê-lo em um DataFrame. Também é importante preparar os dados corretamente; neste caso, foi necessário converter a coluna "mes" em uma variável categórica e atualizar os rótulos para cada mês.
# Carregar o conjunto de dados
air_passengers = pd.read_csv('caminho_para_o_seu_conjunto_de_dados/airline-passengers.csv', delimiter=',')
# Converter para um dataframe
airpassenger_data = pd.DataFrame({
'mes': np.tile(np.arange(1, 13), int(len(air_passengers) / 12)),
'passageiros': air_passengers['Passengers'].astype(int)
})
# Preparar os dados
airpassenger_data['mes'] = airpassenger_data['mes'].astype('category')
airpassenger_data['mes'] = airpassenger_data['mes'].cat.rename_categories({1: 'Jan', 2: 'Fev', 3: 'Mar',
4: 'Abr', 5:'Mai',6:'Jun',
7:'Jul', 8:'Ago', 9:'Set',
10:'Out', 11:'Nov', 12:'Dez'})
O código a seguir calcula os ângulos para cada barra no gráfico circular. A operação (np.arange(len(airpassenger_data)) % 12) garante que oa ângulos se repitam a cada mês. Esses valores são então escalonados para se ajustar a um círculo, multiplicando por 2 * np.pi (o ângulo total de um círculo) e dividindo pelo número de meses. A largura de cada barra é calculada dividindo o círculo completo (2 * np.pi) em 12 segmentos iguais, garantindo que as barras sejam distribuídas igualmente ao redor do círculo. Isso resulta em ângulos e larguras de barras igualmente espaçados para cada mês no gráfico de barras circular.
# Calcula os angulos para o grafico polar
angulos = 2 * np.pi * (np.arange(len(airpassenger_data)) % 12) / 12
largura = 2 * np.pi / 12
Para criar o gráfico, primeiro, configure a figura (fig) e o conjunto de eixos (ax) para o gráfico. O argumento subplot_kw={'projection': 'polar'} diz ao matplotlib para criar um gráfico polar, organizando as barras em um layout circular. Os valores para os angulos and largura são usados para posicionar e espaçãr as barras ao longo do eixo circular. Em seguida, você definirá as marcas no eixo x para corresponder a cada mês e ajustará seus rótulos. Por fim, você pode fazer ajustes adicionais, como remover as linhas do eixo y e a grade para uma aparência mais limpa.
# Configurar o gráfico polar
fig, ax = plt.subplots(figsize=(8, 10), subplot_kw={'projection': 'polar'})
# Cria o gráfico de barras
barras = ax.bar(
angulos,
airpassenger_data['passageiros'],
largura=largura,
color=sea.color_palette("Set2", n_colors=12), # Paleta de cores "Set2" do seaborn
edgecolor='black',
alpha=0.7
)
# Ajustar as marcas no eixo x e as marcas radiais
ax.set_xticks(np.linspace(0, 2 * np.pi, 12, endpoint=False))
ax.set_xticklabels(['Jan', 'Fev', 'Mar', 'Abr', 'Mai', 'Jun',
'Jul', 'Ago', 'Set', 'Out', 'Nov', 'Dez'])
ax.set_yticks([]) # Esconde as marcas radiais do eixo y
ax.grid(False)
plt.title("Passageiros Mensais de Avião", ha='center', fontsize=14,y=1.1) # Adiciona o título
plt.show() # Exibe o gráfico
O resultado é um gráfico circular onde cada barra representa o número de passageiros para cada mês, organizados em um layout circular. As barras são espaçadas uniformemente ao redor do círculo, onde o valor para cada mês está posicionado em um ângulo específico. O gráfico permite uma comparação clara do número de passageiros durante o ano, e ao ajustar os elementos visuais, o gráfico se torna mais focado nos dados, fornecendo uma maneira visualmente atraente e eficaz de exibir a distribuição dos dados ao longo do tempo.
A razão pela qual o matplotlib é usado para criar o gráfico circular é que, as funções do seaborn não têm a opção de mudar as coordenadas para polar, então é tipicamente usado para criar gráficos como histogramas e boxplots: a função .barplot cria um histograma, e essas funções normalmente tem argumentos para definir os valores de x e y, e o argumento ci=None usado está disponível para desativar o intervalo de confiança em cima das barras.
plt.figure(figsize=(10, 8))
sea.barplot(x='mes', y='passageiros', data=airpassenger_data, palette="Set2", ci=None)
# Adicionar título e rótulos
plt.title("Passageiros Mensais de Avião", fontsize=14)
plt.xlabel(" ", fontsize=10)
plt.ylabel("Número de Passageiros", fontsize=10)
# Exibe o gráfico
sea.despine() # Sem borda
plt.show()
Para criar o boxplot, a função .boxplot é utilizada com os valores de x e y para plotar, e o argumento palette="Set2" personaliza as cores, enquanto outras funções (que também são aplicadas no histograma) são usadas para ajustar os rótulos e o título do gráfico, incluindo, adicionalmente, .despine(), que remove as bordas para uma aparência mais limpa.
plt.figure(figsize=(8, 6))
sea.boxplot(x='mes', y='passageiros', data=airpassenger_data, palette="Set2")
# Adicionar título e rótulos
plt.title("Passageiros Mensais de Avião", fontsize=14)
plt.xlabel(" ", fontsize=10)
plt.ylabel("Número de Passageiros", fontsize=10)
# Exibe o gráfico
sea.despine()
plt.show()
Conclusão
Criar gráficos de barras circulares tanto em R quanto em Python oferece uma maneira envolvente de visualizar dados cíclicos ou periódicos. Seja usando o pacote ggplot2 em R ou o matplotlib em Python, ambos oferecem ferramentas poderosas para projetar e personalizar esses gráficos únicos. Os gráficos de barras circulares permitem exibir dados ao longo do tempo ou de qualquer processo cíclico de forma esteticamente atraente, tornando-os ideais para mostrar padrões em vendas mensais, tráfego de clientes, tendências climáticas ou qualquer outro dado repetitivo.
Enquanto o R oferece a flexibilidade de integração perfeita com outros gráficos e a capacidade de modificar facilmente os elementos visuais, Python oferece uma abordagem mais detalhada e personalizável, especialmente quando se trabalha com bibliotecas adicionais como o seaborn para melhorar o design.
Espero que tenha gostado deste post tanto quanto eu gostei de criá-lo! Obrigada por estar aqui e, fique à vontade para compartilhar este conteúdo e comentar!
Também estamos no Instagram @minhaestatistica, e estou ansiosa para ver você por lá!
Desejo a todos um feliz ano novo, com muita graça, felicidade e sucesso. Nos vemos no próximo ano!
Letícia - Minha Estatística.









Comentários
Postar um comentário