Graphique en nuage de points avec des histogrammes

PythonPythonBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Ce laboratoire vous guidera sur la manière de créer un graphique en nuage de points avec des histogrammes à l'aide de Matplotlib. Un graphique en nuage de points avec des histogrammes est un excellent moyen de visualiser la distribution de deux variables et leur relation. Le graphique en nuage de points affiche la relation entre les deux variables, tandis que les histogrammes montrent indépendamment la distribution de chaque variable.

Conseils sur la machine virtuelle

Une fois le démarrage de la machine virtuelle terminé, cliquez dans le coin supérieur gauche pour basculer vers l'onglet Carnet d'étude pour accéder à Jupyter Notebook pour la pratique.

Parfois, vous devrez peut-être attendre quelques secondes pour que Jupyter Notebook ait fini de charger. La validation des opérations ne peut pas être automatisée en raison des limitations de Jupyter Notebook.

Si vous rencontrez des problèmes pendant l'apprentissage, n'hésitez pas à demander à Labby. Donnez votre feedback après la session, et nous réglerons rapidement le problème pour vous.

Importation des bibliothèques

Avant de commencer, nous devons importer les bibliothèques nécessaires. Dans ce laboratoire, nous utiliserons Matplotlib et NumPy.

import matplotlib.pyplot as plt
import numpy as np

Générer des données aléatoires

Nous allons générer quelques données aléatoires pour les utiliser dans le graphique en nuage de points et les histogrammes.

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

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

Définir la fonction scatter_hist

Nous devons définir la fonction scatter_hist, qui prend en entrée les données x et y, ainsi que trois axes, l'axe principal pour le graphique en nuage de points et deux axes marginaux. Elle créera ensuite le graphique en nuage de points et les histogrammes dans les axes fournis.

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

Définir les positions des axes à l'aide d'un gridspec

Nous allons maintenant définir un gridspec avec des rapports de largeur et de hauteur inégaux pour obtenir la disposition souhaitée. Nous allons également créer les axes et les passer à la fonction 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)

Définir les positions des axes à l'aide de inset_axes

Nous pouvons également utiliser inset_axes pour positionner les axes marginaux en dehors des axes principaux. L'avantage de faire ainsi est que le rapport d'aspect des axes principaux peut être fixé, et les axes marginaux seront toujours tracés par rapport à la position des axes.

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

Afficher le graphique

Enfin, nous pouvons afficher le graphique à l'aide de plt.show().

plt.show()

Récapitulatif

Dans ce laboratoire, nous avons appris à créer un graphique en nuage de points avec des histogrammes à l'aide de Matplotlib. Nous avons défini la fonction scatter_hist, généré des données aléatoires, défini les positions des axes à l'aide d'un gridspec et de inset_axes, et affiché le graphique. Les graphiques en nuage de points avec des histogrammes sont un excellent moyen de visualiser la distribution de deux variables et leur relation.