Introdução
Este laboratório irá guiá-lo sobre como criar um gráfico de dispersão com histogramas usando Matplotlib. Um gráfico de dispersão com histogramas é uma ótima maneira de visualizar a distribuição de duas variáveis e sua relação. O gráfico de dispersão exibe a relação entre as duas variáveis, enquanto os histogramas mostram a distribuição de cada variável independentemente.
Dicas para a VM
Após a inicialização da VM, clique no canto superior esquerdo para mudar para a aba Notebook e acessar o Jupyter Notebook para praticar.
Às vezes, pode ser necessário aguardar alguns segundos para que o Jupyter Notebook termine de carregar. A validação das operações não pode ser automatizada devido a limitações no Jupyter Notebook.
Se você enfrentar problemas durante o aprendizado, sinta-se à vontade para perguntar ao Labby. Forneça feedback após a sessão, e resolveremos o problema prontamente para você.
Importar bibliotecas
Antes de começarmos, precisamos importar as bibliotecas necessárias. Neste laboratório, usaremos Matplotlib e NumPy.
import matplotlib.pyplot as plt
import numpy as np
Gerar dados aleatórios
Geraremos alguns dados aleatórios para usar no gráfico de dispersão e nos histogramas.
## Fixing random state for reproducibility
np.random.seed(19680801)
## Generate random data
x = np.random.randn(1000)
y = np.random.randn(1000)
Definir a função scatter_hist
Precisamos definir a função scatter_hist, que recebe dados x e y, bem como três eixos: o eixo principal para o gráfico de dispersão e dois eixos marginais. Em seguida, ela criará o gráfico de dispersão e os histogramas dentro dos eixos fornecidos.
def scatter_hist(x, y, ax, ax_histx, ax_histy):
## Remove labels from the histograms
ax_histx.tick_params(axis="x", labelbottom=False)
ax_histy.tick_params(axis="y", labelleft=False)
## Create the scatter plot
ax.scatter(x, y)
## Determine nice limits by hand
binwidth = 0.25
xymax = max(np.max(np.abs(x)), np.max(np.abs(y)))
lim = (int(xymax/binwidth) + 1) * binwidth
bins = np.arange(-lim, lim + binwidth, binwidth)
ax_histx.hist(x, bins=bins)
ax_histy.hist(y, bins=bins, orientation='horizontal')
Definir as posições dos eixos usando um gridspec
Agora definiremos um gridspec com proporções de largura e altura desiguais para obter o layout desejado. Também criaremos os eixos e os passaremos para a função scatter_hist.
## Start with a square Figure.
fig = plt.figure(figsize=(6, 6))
## Add a gridspec with two rows and two columns and a ratio of 1 to 4 between
## the size of the marginal axes and the main axes in both directions.
## Also adjust the subplot parameters for a square plot.
gs = fig.add_gridspec(2, 2, width_ratios=(4, 1), height_ratios=(1, 4),
left=0.1, right=0.9, bottom=0.1, top=0.9,
wspace=0.05, hspace=0.05)
## Create the Axes.
ax = fig.add_subplot(gs[1, 0])
ax_histx = fig.add_subplot(gs[0, 0], sharex=ax)
ax_histy = fig.add_subplot(gs[1, 1], sharey=ax)
## Draw the scatter plot and marginals.
scatter_hist(x, y, ax, ax_histx, ax_histy)
Definir as posições dos eixos usando inset_axes
Também podemos usar inset_axes para posicionar as marginais fora dos eixos principais. A vantagem de fazer isso é que a proporção do eixo principal pode ser fixada, e as marginais sempre serão desenhadas em relação à posição dos eixos.
## Create a Figure, which doesn't have to be square.
fig = plt.figure(layout='constrained')
## Create the main axes, leaving 25% of the figure space at the top and on the right to position marginals.
ax = fig.add_gridspec(top=0.75, right=0.75).subplots()
## The main axes' aspect can be fixed.
ax.set(aspect=1)
## Create marginal axes, which have 25% of the size of the main axes.
## Note that the inset axes are positioned *outside* (on the right and the top) of the main axes,
## by specifying axes coordinates greater than 1.
## Axes coordinates less than 0 would likewise specify positions on the left and the bottom of the main axes.
ax_histx = ax.inset_axes([0, 1.05, 1, 0.25], sharex=ax)
ax_histy = ax.inset_axes([1.05, 0, 0.25, 1], sharey=ax)
## Draw the scatter plot and marginals.
scatter_hist(x, y, ax, ax_histx, ax_histy)
Exibir o gráfico
Finalmente, podemos exibir o gráfico usando plt.show().
plt.show()
Resumo
Neste laboratório, aprendemos como criar um gráfico de dispersão com histogramas usando Matplotlib. Definimos a função scatter_hist, geramos dados aleatórios, definimos as posições dos eixos usando gridspec e inset_axes, e exibimos o gráfico. Gráficos de dispersão com histogramas são uma ótima maneira de visualizar a distribuição de duas variáveis e sua relação.