Creando diagramas de dispersión con leyendas

Beginner

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

Introducción

Los diagramas de dispersión se utilizan para visualizar la relación entre dos variables. Un diagrama de dispersión con leyenda es útil cuando hay múltiples grupos en los datos y queremos distinguirlos en el gráfico. En este laboratorio, aprenderemos a crear diagramas de dispersión con leyendas en Python utilizando la librería Matplotlib.

Consejos sobre la VM

Una vez finalizada la inicialización de la VM, haga 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 tenga 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 tiene problemas durante el aprendizaje, no dude en preguntar a Labby. Deje sus comentarios después de la sesión y lo resolveremos rápidamente para usted.

Importando las bibliotecas necesarias

Comenzamos importando las bibliotecas necesarias, incluyendo NumPy y Matplotlib.

import matplotlib.pyplot as plt
import numpy as np

Creando un diagrama de dispersión con múltiples grupos

Podemos crear un diagrama de dispersión con múltiples grupos recorriendo cada grupo y creando un diagrama de dispersión para ese grupo. Especificamos el color, el tamaño y la transparencia de los marcadores para cada grupo utilizando los parámetros c, s y alpha, respectivamente. También establecemos el parámetro label con el nombre del grupo, que se utilizará en la leyenda.

fig, ax = plt.subplots()
for color in ['tab:blue', 'tab:orange', 'tab:green']:
    n = 750
    x, y = np.random.rand(2, n)
    scale = 200.0 * np.random.rand(n)
    ax.scatter(x, y, c=color, s=scale, label=color,
               alpha=0.3, edgecolors='none')

ax.legend()
ax.grid(True)

plt.show()

Creación automática de leyenda

También podemos utilizar el método PathCollection.legend_elements para crear automáticamente una leyenda para un diagrama de dispersión. Este método intentará determinar una cantidad útil de entradas de leyenda que se mostrarán y devolverá una tupla de manejos y etiquetas.

N = 45
x, y = np.random.rand(2, N)
c = np.random.randint(1, 5, size=N)
s = np.random.randint(10, 220, size=N)

fig, ax = plt.subplots()

scatter = ax.scatter(x, y, c=c, s=s)

## produce a legend with the unique colors from the scatter
legend1 = ax.legend(*scatter.legend_elements(),
                    loc="lower left", title="Classes")
ax.add_artist(legend1)

## produce a legend with a cross-section of sizes from the scatter
handles, labels = scatter.legend_elements(prop="sizes", alpha=0.6)
legend2 = ax.legend(handles, labels, loc="upper right", title="Sizes")

plt.show()

Personalizando los elementos de la leyenda

Podemos personalizar aún más los elementos de la leyenda utilizando argumentos adicionales en el método PathCollection.legend_elements. Por ejemplo, podemos especificar el número de entradas de leyenda que se deben crear y cómo deben ser etiquetadas.

volume = np.random.rayleigh(27, size=40)
amount = np.random.poisson(10, size=40)
ranking = np.random.normal(size=40)
price = np.random.uniform(1, 10, size=40)

fig, ax = plt.subplots()

## Because the price is much too small when being provided as size for ``s``,
## we normalize it to some useful point sizes, s=0.3*(price*3)**2
scatter = ax.scatter(volume, amount, c=ranking, s=0.3*(price*3)**2,
                     vmin=-3, vmax=3, cmap="Spectral")

## Produce a legend for the ranking (colors). Even though there are 40 different
## rankings, we only want to show 5 of them in the legend.
legend1 = ax.legend(*scatter.legend_elements(num=5),
                    loc="upper left", title="Ranking")
ax.add_artist(legend1)

## Produce a legend for the price (sizes). Because we want to show the prices
## in dollars, we use the *func* argument to supply the inverse of the function
## used to calculate the sizes from above. The *fmt* ensures to show the price
## in dollars. Note how we target at 5 elements here, but obtain only 4 in the
## created legend due to the automatic round prices that are chosen for us.
kw = dict(prop="sizes", num=5, color=scatter.cmap(0.7), fmt="$ {x:.2f}",
          func=lambda s: np.sqrt(s/.3)/3)
legend2 = ax.legend(*scatter.legend_elements(**kw),
                    loc="lower right", title="Price")

plt.show()

Resumen

En este laboratorio, aprendimos cómo crear diagramas de dispersión con leyendas en Python utilizando la biblioteca Matplotlib. Creamos diagramas de dispersión con múltiples grupos y la creación automática de leyendas. También personalizamos los elementos de la leyenda utilizando el método PathCollection.legend_elements. Los diagramas de dispersión con leyendas son útiles para visualizar la relación entre dos variables con múltiples grupos.