Gráficos de barras e histogramas
Visualize contagens categóricas com ax.bar() e distribuições de dados com ax.hist(), ajustando o número de intervalos e a cor das bordas.
Gráficos de barras e histogramas é uma aula grátis de Pandas & NumPy Academy no CoddyKit. Esta é a aula 3 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Pandas & NumPy Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Pandas & NumPy Academy inclui 4 aulas no total.
Gráficos de barras e histogramas
Gráficos de barras exibem dados categóricos: uma barra por categoria, com a altura proporcional a um valor. Eles respondem à pergunta “quanto cada categoria possui?”. Histogramas exibem a distribuição de uma variável numérica contínua: os dados são divididos em intervalos, e a altura da barra mostra a contagem ou frequência em cada intervalo. Eles respondem à pergunta “como esses valores estão distribuídos?”. Ambos usam ax.bar() e ax.hist(), respectivamente.
ax.bar() para gráficos de barras verticais
ax.bar(x, height) desenha um gráfico de barras vertical, em que x é uma sequência de posições (ou rótulos) das categorias e height é o valor da barra. Parâmetros importantes: width (padrão 0.8, controla a largura da barra em relação ao espaço), color, edgecolor e align ('center' ou 'edge'). Retorna uma lista de objetos Artist Rectangle.
import matplotlib.pyplot as plt
import numpy as np
categories = ['East', 'West', 'North', 'South']
values = [420, 380, 310, 290]
fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(categories, values, color='steelblue', edgecolor='white', width=0.6)
ax.set_title('Regional Revenue')
ax.set_xlabel('Region')
ax.set_ylabel('Revenue (USD)')
# plt.show()
plt.close()Personalizando a aparência das barras
Algumas personalizações tornam os gráficos de barras muito mais fáceis de ler: use uma única cor de destaque para todas as barras (ou um vetor de cores para diferenciá-las), adicione rótulos de valor acima de cada barra com ax.bar_label(), controle a largura das barras para deixar espaço entre elas e defina ax.set_ylim(0, max * 1.15) para deixar espaço acima da barra mais alta para os rótulos.
fig, ax = plt.subplots(figsize=(7, 4))
bars = ax.bar(categories, values, color='steelblue', edgecolor='white', width=0.6)
# Add value labels above bars
ax.bar_label(bars, fmt='%d', padding=3, fontsize=10)
# Give space above bars for labels
ax.set_ylim(0, max(values) * 1.15)
ax.set_title('Regional Revenue')
plt.tight_layout()
plt.close()Gráficos de barras horizontais com ax.barh()
Use ax.barh(y, width) para criar gráficos de barras horizontais. As barras horizontais são preferíveis quando os rótulos das categorias são longos (eles são lidos naturalmente da esquerda para a direita) ou quando há muitas categorias (elas se organizam de forma mais compacta). Todos os mesmos parâmetros de personalização se aplicam: height controla a espessura da barra, e ax.barh_label() (ou ax.bar_label()) adiciona rótulos de texto.
import pandas as pd
df = pd.DataFrame({'region': categories, 'revenue': values})
df_sorted = df.sort_values('revenue')
fig, ax = plt.subplots(figsize=(7, 4))
ax.barh(df_sorted['region'], df_sorted['revenue'],
color='steelblue', edgecolor='white', height=0.5)
ax.set_title('Revenue by Region (Sorted)')
ax.set_xlabel('Revenue (USD)')
plt.tight_layout()
plt.close()Gráficos de barras agrupadas
Para comparar vários grupos lado a lado, crie um gráfico de barras agrupadas deslocando manualmente as posições das barras. Calcule as posições centrais de cada grupo e, em seguida, subtraia ou adicione um deslocamento fixo para cada subgrupo. A largura total das barras mais o espaço entre os grupos deve ser igual a 1.0 para manter as barras sem sobreposição. Definir ax.set_xticks() centraliza os rótulos das marcas entre as barras agrupadas.
products = ['A', 'B', 'C']
q1 = [80, 120, 95]
q2 = [90, 110, 105]
x = np.arange(len(products))
width = 0.35
fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(x - width/2, q1, width, label='Q1', color='steelblue')
ax.bar(x + width/2, q2, width, label='Q2', color='coral')
ax.set_xticks(x)
ax.set_xticklabels(products)
ax.legend()
ax.set_title('Q1 vs Q2 Sales by Product')
plt.close()Gráficos de barras empilhadas
As barras empilhadas mostram a composição de um total entre vários subgrupos. As barras do segundo grupo começam onde terminam as barras do primeiro, usando o parâmetro bottom. O bottom de cada camada seguinte é a soma acumulada de todas as camadas anteriores. As barras empilhadas são úteis para mostrar simultaneamente o total e a contribuição de cada componente.
q1_arr = np.array(q1)
q2_arr = np.array(q2)
fig, ax = plt.subplots(figsize=(7, 4))
ax.bar(products, q1_arr, label='Q1', color='steelblue')
ax.bar(products, q2_arr, bottom=q1_arr, label='Q2', color='coral')
ax.legend()
ax.set_title('Stacked Q1 + Q2 Sales by Product')
ax.set_ylabel('Total Sales')
plt.close()ax.hist() para histogramas
ax.hist(data, bins) cria um histograma. O parâmetro bins controla em quantos intervalos igualmente espaçados os dados serão divididos (o padrão é 10). Também é possível passar uma lista de limites de intervalos desiguais. Parâmetros importantes: density=True normaliza o histograma para uma densidade de probabilidade, edgecolor adiciona bordas entre as barras, e color e alpha controlam a aparência.
np.random.seed(42)
data = np.random.randn(500) # 500 samples from standard normal
fig, ax = plt.subplots(figsize=(7, 4))
ax.hist(data, bins=30, color='steelblue', edgecolor='white', alpha=0.7)
ax.set_title('Distribution of Values')
ax.set_xlabel('Value')
ax.set_ylabel('Count')
plt.close()Escolhendo a quantidade de intervalos
O número de intervalos afeta muito a aparência de um histograma. Poucos intervalos ocultam a estrutura dos dados; intervalos demais criam picos ruidosos. Heurísticas comuns: regra de Sturges (≈ log2(n) + 1), regra de Scott ou regra de Freedman-Diaconis. O Matplotlib oferece essas opções como cadeias de caracteres: bins='auto', bins='scott', bins='fd'. Para análises exploratórias, experimente manualmente alguns valores; em apresentações, escolha a quantidade de intervalos que comunique melhor o formato dos dados.
fig, axes = plt.subplots(1, 3, figsize=(12, 4))
for ax, b in zip(axes, [5, 30, 'auto']):
ax.hist(data, bins=b, edgecolor='white', color='steelblue', alpha=0.7)
ax.set_title(f'bins={b}')
ax.set_xlabel('Value')
plt.tight_layout()
plt.close()Histogramas Sobrepostos para Comparação
Para comparar duas distribuições nos mesmos eixos, chame ax.hist() duas vezes com dados e cores diferentes. Use alpha=0.5 em ambas para que a sobreposição fique visível. Adicione rótulos e chame ax.legend(). Usar density=True normaliza os dois histogramas para a mesma escala quando os tamanhos das amostras diferem, tornando os formatos diretamente comparáveis.
group_a = np.random.randn(300)
group_b = np.random.randn(300) + 1.5 # shifted right
fig, ax = plt.subplots(figsize=(7, 4))
ax.hist(group_a, bins=25, alpha=0.5, color='steelblue', label='Group A', density=True)
ax.hist(group_b, bins=25, alpha=0.5, color='coral', label='Group B', density=True)
ax.legend()
ax.set_title('Distribution Comparison')
plt.close()Representando Series e DataFrames do Pandas
.plot.bar() e .plot.hist() estão disponíveis como métodos de DataFrame/Series e produzem automaticamente figuras do Matplotlib. Eles aceitam um parâmetro ax para desenhar em um objeto Axes existente. Essa é a maneira mais rápida de criar gráficos de barras a partir de dados agrupados do Pandas: calcule a agregação com groupby, chame .plot.bar() no resultado e personalize o Axes retornado.
import pandas as pd
import numpy as np
df_sales = pd.DataFrame({
'region': ['East', 'West', 'North', 'South'],
'revenue': [420, 380, 310, 290]
}).set_index('region')
fig, ax = plt.subplots(figsize=(7, 4))
df_sales['revenue'].plot.bar(ax=ax, color='steelblue', rot=0)
ax.set_title('Revenue by Region')
plt.tight_layout()
plt.close()Escolhendo entre Gráfico de Barras e Histograma
A escolha entre um gráfico de barras e um histograma depende do tipo dos seus dados. Use um gráfico de barras quando o eixo x representar categorias distintas e não ordenadas (nomes de produtos, regiões, segmentos de usuários), cujas barras representem valores agregados para cada categoria. Use um histograma quando o eixo x for uma variável numérica contínua e você quiser mostrar como os valores se distribuem ao longo de um intervalo. Confundi-los é um erro comum de visualização que induz os leitores a uma interpretação incorreta do tipo de dado.
# Bar chart: categorical x-axis (product names)
products = ['Widget', 'Gadget', 'Doohickey']
revenue = [500, 300, 200]
fig, ax = plt.subplots(figsize=(5, 3))
ax.bar(products, revenue, color='steelblue')
ax.set_title('Revenue per Product (Bar Chart)')
plt.close()
# Histogram: continuous x-axis (order sizes)
order_sizes = np.random.exponential(scale=50, size=300)
fig, ax = plt.subplots(figsize=(5, 3))
ax.hist(order_sizes, bins=20, color='coral', edgecolor='white')
ax.set_title('Distribution of Order Sizes (Histogram)')
plt.close()Verificação Rápida
Teste sua compreensão sobre gráficos de barras e histogramas nesta lição.
Recapitulação da Lição
Nesta lição, você aprendeu que ax.bar() cria gráficos de barras verticais e ax.barh() cria gráficos de barras horizontais; bottom permite criar barras empilhadas; ax.hist() cria histogramas cuja quantidade de intervalos é controlada por bins; e density=True normaliza histogramas para uma comparação justa. A seguir, adicionaremos rótulos aos eixos, títulos e salvaremos figuras com qualidade para publicação.
Perguntas Frequentes
A aula “Gráficos de barras e histogramas” é grátis?
Sim — o texto completo de “Gráficos de barras e histogramas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Pandas & NumPy Academy, atualize para CoddyKit PRO. O curso de Pandas & NumPy Academy inclui 4 aulas no total.
O que vou aprender em “Gráficos de barras e histogramas”?
Visualize contagens categóricas com ax.bar() e distribuições de dados com ax.hist(), ajustando o número de intervalos e a cor das bordas. Você pratica Pandas & NumPy Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Pandas & NumPy Academy?
Nenhuma experiência prévia é necessária. Pandas & NumPy Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 3 de 4.
Quanto tempo leva a aula “Gráficos de barras e histogramas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Pandas & NumPy Academy?
Sim. Cada aula de Pandas & NumPy Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Arquitetura de Figure e Axes
- Gráficos de linhas e dispersão
- Gráficos de barras e histogramas
- Rótulos, títulos e salvamento de gráficos