Diagrama de dispersión con histogramas

PythonPythonBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Esta práctica te guiará sobre cómo crear un diagrama de dispersión con histogramas utilizando Matplotlib. Un diagrama de dispersión con histogramas es una excelente manera de visualizar la distribución de dos variables y su relación. El diagrama de dispersión muestra la relación entre las dos variables, mientras que los histogramas muestran la distribución de cada variable por separado.

Consejos sobre la VM

Una vez que se haya iniciado la VM, haz clic en la esquina superior izquierda para cambiar a la pestaña Cuaderno y acceder a Jupyter Notebook para practicar.

A veces, es posible que tengas que esperar unos segundos a que Jupyter Notebook termine de cargarse. La validación de las operaciones no se puede automatizar debido a las limitaciones de Jupyter Notebook.

Si tienes problemas durante el aprendizaje, no dudes en preguntar a Labby. Proporciona retroalimentación después de la sesión y resolveremos el problema para ti de inmediato.

Importar bibliotecas

Antes de comenzar, necesitamos importar las bibliotecas necesarias. En esta práctica, usaremos Matplotlib y NumPy.

import matplotlib.pyplot as plt
import numpy as np

Generar datos aleatorios

Generaremos algunos datos aleatorios para utilizar en el diagrama de dispersión y los histogramas.

## Fixing random state for reproducibility
np.random.seed(19680801)

## Generate random data
x = np.random.randn(1000)
y = np.random.randn(1000)

Definir la función scatter_hist

Necesitamos definir la función scatter_hist, que toma los datos x e y, así como tres ejes: el eje principal para el diagrama de dispersión y dos ejes marginales. Luego creará el diagrama de dispersión y los histogramas dentro de los ejes proporcionados.

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 las posiciones de los ejes usando un gridspec

Ahora definiremos un gridspec con proporciones de ancho y alto desiguales para lograr el diseño deseado. También crearemos los ejes y los pasaremos a la función 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 las posiciones de los ejes usando inset_axes

También podemos usar inset_axes para posicionar los ejes marginales fuera del eje principal. La ventaja de hacerlo es que la relación de aspecto del eje principal puede ser fija, y los ejes marginales siempre se dibujarán en relación con la posición de los ejes.

## 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)

Mostrar el gráfico

Finalmente, podemos mostrar el gráfico usando plt.show().

plt.show()

Resumen

En este laboratorio, aprendimos cómo crear un diagrama de dispersión con histogramas usando Matplotlib. Definimos la función scatter_hist, generamos datos aleatorios, definimos las posiciones de los ejes usando un gridspec y inset_axes, y mostramos el gráfico. Los diagramas de dispersión con histogramas son una excelente manera de visualizar la distribución de dos variables y su relación.