Diagrama de dispersión con histogramas #

Muestre las distribuciones marginales de un gráfico de dispersión como histogramas a los lados del gráfico.

Para una buena alineación de los ejes principales con los marginales, se muestran dos opciones a continuación:

Si bien Axes.inset_axespuede ser un poco más complejo, permite el manejo correcto de los ejes principales con una relación de aspecto fija.

En el ejemplo de histograma de dispersión (ejes localizables) se muestra un método alternativo para producir una figura similar utilizando el axes_grid1 kit de herramientas . Finalmente, también es posible posicionar todos los ejes en coordenadas absolutas usando (no se muestra aquí).Figure.add_axes

Primero definamos una función que tome datos x e y como entrada, así como tres ejes, los ejes principales para la dispersión y dos ejes marginales. A continuación, creará la dispersión y los histogramas dentro de los ejes proporcionados.

import numpy as np
import matplotlib.pyplot as plt

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

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


def scatter_hist(x, y, ax, ax_histx, ax_histy):
    # no labels
    ax_histx.tick_params(axis="x", labelbottom=False)
    ax_histy.tick_params(axis="y", labelleft=False)

    # the scatter plot:
    ax.scatter(x, y)

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

Definición de las posiciones de los ejes usando un gridspec #

Definimos una especificación de cuadrícula con proporciones de ancho y altura desiguales para lograr el diseño deseado. Consulte también el tutorial Disposición de varios ejes en una figura .

# 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)
hist. disperso

Definiendo las posiciones de los ejes usando inset_axes #

inset_axesse puede utilizar para colocar marginales fuera de los ejes principales. La ventaja de hacerlo es que la relación de aspecto de los ejes principales se puede fijar y los 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(constrained_layout=True)
# 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)

plt.show()
hist. disperso

Referencias

En este ejemplo se muestra el uso de las siguientes funciones, métodos, clases y módulos:

Tiempo total de ejecución del script: (0 minutos 1.217 segundos)

Galería generada por Sphinx-Gallery