Histogramas Matplotlib

MatplotlibBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá a criar e personalizar histogramas usando Matplotlib, uma das bibliotecas de visualização de dados mais populares em Python. Um histograma é uma ferramenta poderosa para visualizar a distribuição de um conjunto de dados numéricos. Ele agrupa números em intervalos (ou "bins") e exibe a frequência de pontos de dados que caem em cada bin.

Você passará pelas seguintes etapas:

  1. Gerar dados de amostra usando NumPy.
  2. Criar um histograma básico.
  3. Personalizar o número de bins.
  4. Alterar a cor e o estilo da borda das barras do histograma.
  5. Normalizar o histograma para mostrar a densidade de probabilidade.

Ao final deste laboratório, você será capaz de gerar histogramas informativos e visualmente atraentes para seus projetos de análise de dados. Todos os gráficos serão salvos como arquivos de imagem, que você poderá visualizar diretamente no LabEx WebIDE.

Gerar dados de amostra usando numpy.random

Nesta etapa, você gerará um conjunto de dados de amostra que poderemos usar para plotar um histograma. Usaremos a biblioteca NumPy, que é um pacote fundamental para computação científica em Python. Ela fornece um objeto de array multidimensional de alto desempenho e ferramentas para trabalhar com esses arrays.

Usaremos a função numpy.random.normal() para gerar dados que seguem uma distribuição normal (ou Gaussiana). Este é um tipo comum de distribuição de dados encontrado em muitos cenários do mundo real.

Primeiro, abra o arquivo main.py no explorador de arquivos no lado esquerdo do WebIDE. Em seguida, adicione o seguinte código a ele. Este código importará a biblioteca numpy e gerará 1000 números aleatórios com uma média de 0 e um desvio padrão de 1.

import numpy as np

## Generate 1000 data points from a normal distribution
## with a mean (loc) of 0 and a standard deviation (scale) of 1.
data = np.random.normal(loc=0, scale=1, size=1000)

print("Sample data generated successfully.")

Para executar o script, abra um terminal no WebIDE (Terminal -> New Terminal) e execute o seguinte comando. Seu diretório de trabalho já é /home/labex/project.

python3 main.py

Você verá uma mensagem de confirmação no terminal.

Sample data generated successfully.

A variável data em seu script agora contém um array de 1000 números, pronto para visualização na próxima etapa.

Plotar histograma usando plt.hist(data)

Nesta etapa, você criará seu primeiro histograma. Usaremos o módulo matplotlib.pyplot, que fornece uma interface simples para criar gráficos. Ele é convencionalmente importado com o alias plt.

A função principal para criar um histograma é plt.hist(). Em sua forma mais simples, ela recebe um único argumento: o array de dados que você deseja plotar.

Como estamos em um ambiente não interativo, não podemos exibir o gráfico diretamente com plt.show(). Em vez disso, devemos salvar o gráfico em um arquivo usando plt.savefig().

Atualize seu arquivo main.py com o seguinte código. Ele adiciona a lógica de plotagem do Matplotlib ao código de geração de dados da etapa anterior.

import numpy as np
import matplotlib.pyplot as plt

## Generate sample data
data = np.random.normal(loc=0, scale=1, size=1000)

## Create a histogram
plt.hist(data)

## Save the plot to a file
plt.savefig('/home/labex/project/histogram.png')

print("Basic histogram saved to histogram.png")

Agora, execute o script novamente no terminal:

python3 main.py

Você deverá ver a seguinte saída:

Basic histogram saved to histogram.png

Um novo arquivo chamado histogram.png aparecerá no explorador de arquivos à esquerda. Dê um duplo clique nele para abrir e visualizar seu primeiro histograma. Ele mostrará a distribuição de frequência dos dados aleatórios que você gerou.

Histogram

Definir número de barras usando o parâmetro bins

Nesta etapa, você aprenderá como controlar a granularidade do seu histograma definindo o número de barras (bins). Um "bin" é um intervalo que representa uma faixa de dados. O número de barras pode afetar significativamente como a distribuição é interpretada. Poucas barras podem ocultar detalhes importantes, enquanto muitas podem criar um gráfico ruidoso.

A função plt.hist() do Matplotlib possui um parâmetro bins que permite especificar o número de barras. Por padrão, o Matplotlib escolhe um número razoável, mas muitas vezes você desejará ajustá-lo.

Vamos modificar o código para criar um histograma com 30 barras. Também o salvaremos em um novo arquivo, histogram_bins.png, para compará-lo com o gráfico anterior.

Atualize seu arquivo main.py da seguinte forma:

import numpy as np
import matplotlib.pyplot as plt

## Generate sample data
data = np.random.normal(loc=0, scale=1, size=1000)

## Create a histogram with 30 bins
plt.hist(data, bins=30)

## Save the plot to a new file
plt.savefig('/home/labex/project/histogram_bins.png')

print("Histogram with 30 bins saved to histogram_bins.png")

Execute o script a partir do terminal:

python3 main.py

A saída será:

Histogram with 30 bins saved to histogram_bins.png

Agora, localize histogram_bins.png no explorador de arquivos e abra-o. Compare-o com o primeiro histograma. Você deverá notar que as barras estão mais estreitas, fornecendo uma visão mais detalhada da distribuição dos dados.

Histogram with 30 bins

Personalizar cor e edgecolor do histograma

Nesta etapa, você personalizará a aparência visual do histograma. Um gráfico bem estilizado é mais fácil de ler e mais profissional. A função plt.hist() oferece vários parâmetros para estilização, incluindo color para o preenchimento das barras e edgecolor para as bordas das barras.

Vamos mudar a cor das barras para um azul claro e adicionar bordas pretas para que cada bin se destaque mais claramente.

Modifique seu arquivo main.py para incluir esses novos parâmetros. Salvaremos este gráfico personalizado em histogram_color.png.

import numpy as np
import matplotlib.pyplot as plt

## Generate sample data
data = np.random.normal(loc=0, scale=1, size=1000)

## Create a histogram with 30 bins, custom color, and edgecolor
plt.hist(data, bins=30, color='skyblue', edgecolor='black')

## Save the plot to a new file
plt.savefig('/home/labex/project/histogram_color.png')

print("Styled histogram saved to histogram_color.png")

Execute o script no terminal:

python3 main.py

Você verá esta mensagem:

Styled histogram saved to histogram_color.png

Abra o arquivo recém-criado histogram_color.png. Você verá um histograma muito mais polido, com barras azul claro e contornos pretos distintos.

Styled histogram

Normalizar histograma usando density=True

Nesta etapa, você aprenderá como criar um histograma normalizado. Por padrão, o eixo y de um histograma representa a contagem de pontos de dados em cada bin. No entanto, às vezes é mais útil visualizar a distribuição como uma densidade de probabilidade. Em um histograma normalizado, a altura de cada barra é ajustada de modo que a área total de todas as barras seja igual a 1.

Isso é alcançado definindo o parâmetro density como True na função plt.hist(). Também é uma boa prática adicionar rótulos (labels) e um título ao seu gráfico para torná-lo autoexplicativo.

Vamos atualizar o script para criar um histograma normalizado e adicionar rótulos descritivos.

import numpy as np
import matplotlib.pyplot as plt

## Generate sample data
data = np.random.normal(loc=0, scale=1, size=1000)

## Create a normalized histogram
plt.hist(data, bins=30, color='skyblue', edgecolor='black', density=True)

## Add title and labels
plt.title('Normalized Histogram of Sample Data')
plt.xlabel('Value')
plt.ylabel('Probability Density')

## Save the plot to a new file
plt.savefig('/home/labex/project/histogram_normalized.png')

print("Normalized histogram saved to histogram_normalized.png")

Execute a versão final do seu script:

python3 main.py

A saída será:

Normalized histogram saved to histogram_normalized.png

Abra histogram_normalized.png. Observe que os valores do eixo y agora são muito menores. Eles representam a densidade de probabilidade, não contagens brutas. A forma geral da distribuição permanece a mesma, mas a escala agora está padronizada, o que é útil para comparar distribuições de conjuntos de dados de tamanhos diferentes.

Normalized histogram

Resumo

Parabéns por completar este laboratório! Você aprendeu as habilidades essenciais para criar e personalizar histogramas com Matplotlib em Python.

Neste laboratório, você:

  • Gerou dados de amostra usando numpy.random.normal().
  • Plotou um histograma básico com plt.hist().
  • Controlou o número de bins usando o parâmetro bins.
  • Estilizou seu histograma com os parâmetros color e edgecolor.
  • Criou um histograma de densidade de probabilidade normalizado usando density=True.
  • Adicionou um título e rótulos ao seu gráfico para melhor contexto.

Histogramas são uma ferramenta fundamental na exploração e análise de dados. As técnicas que você aprendeu aqui permitirão visualizar efetivamente a distribuição dos seus próprios conjuntos de dados. Sinta-se à vontade para continuar experimentando com outros parâmetros e tipos de gráficos em Matplotlib.