Imagen de contorno de Matplotlib

Beginner

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

Introducción

En este laboratorio, aprenderá a crear una imagen de contorno utilizando la biblioteca Matplotlib de Python. La imagen de contorno es una técnica de visualización que representa una superficie tridimensional mediante un trazado bidimensional. La imagen de contorno consta de líneas de contorno, que son líneas que conectan puntos de igual valor en la superficie, y contornos rellenos, que son regiones entre las líneas de contorno.

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 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.

Importar bibliotecas

En este paso, importará las bibliotecas necesarias para crear la imagen de contorno.

import matplotlib.pyplot as plt
import numpy as np

from matplotlib import cm

Definir los datos

En este paso, definirá los datos que se van a representar. Los datos son una matriz bidimensional de valores que representa la superficie.

## El delta predeterminado es grande porque eso lo hace rápido y demuestra
## el correcto registro entre la imagen y los contornos.
delta = 0.5

extent = (-3, 4, -4, 3)

x = np.arange(-3.0, 4.001, delta)
y = np.arange(-4.0, 3.001, delta)
X, Y = np.meshgrid(x, y)
Z1 = np.exp(-X**2 - Y**2)
Z2 = np.exp(-(X - 1)**2 - (Y - 1)**2)
Z = (Z1 - Z2) * 2

Crear la imagen de contorno

En este paso, creará la imagen de contorno utilizando las funciones contour y contourf de Matplotlib.

## Aumente el límite superior para evitar errores de truncamiento.
levels = np.arange(-2.0, 1.601, 0.4)

norm = cm.colors.Normalize(vmax=abs(Z).max(), vmin=-abs(Z).max())
cmap = cm.PRGn

fig, _axs = plt.subplots(nrows=2, ncols=2)
fig.subplots_adjust(hspace=0.3)
axs = _axs.flatten()

cset1 = axs[0].contourf(X, Y, Z, levels, norm=norm,
                        cmap=cmap.resampled(len(levels) - 1))
## No es necesario, pero para el mapa de colores, solo necesitamos
## el número de niveles menos 1. Para evitar errores de discretización, use
## este número o un número grande como el predeterminado (256).

## Si queremos líneas así como regiones rellenas, debemos llamar
## a contour por separado; no intente cambiar el color de borde o el ancho de borde
## de los polígonos en las colecciones devueltas por contourf.
## Utilice los niveles de salida de la llamada anterior para garantizar que son los mismos.

cset2 = axs[0].contour(X, Y, Z, cset1.levels, colors='k')

## Realmente no necesitamos líneas de contorno discontinuas para indicar
## regiones negativas, así que las desactivaremos.

for c in cset2.collections:
    c.set_linestyle('solid')

## Aquí es más fácil hacer una llamada separada a contour que
## configurar una matriz de colores y anchos de línea.
## Estamos creando una línea verde gruesa como un contorno de cero.
## Especifique el nivel cero como una tupla con solo 0 en ella.

cset3 = axs[0].contour(X, Y, Z, (0,), colors='g', linewidths=2)
axs[0].set_title('Contornos rellenos')
fig.colorbar(cset1, ax=axs[0])


axs[1].imshow(Z, extent=extent, cmap=cmap, norm=norm)
axs[1].contour(Z, levels, colors='k', origin='upper', extent=extent)
axs[1].set_title("Imagen, origen 'upper'")

axs[2].imshow(Z, origin='lower', extent=extent, cmap=cmap, norm=norm)
axs[2].contour(Z, levels, colors='k', origin='lower', extent=extent)
axs[2].set_title("Imagen, origen 'lower'")

## Usaremos la interpolación "nearest" aquí para mostrar los actuales
## píxeles de la imagen.
## Tenga en cuenta que las líneas de contorno no se extienden hasta el borde del cuadro.
## Esto es intencional. Los valores de Z se definen en el centro de cada
## píxel de imagen (cada bloque de color en el siguiente subtrayecto), por lo que
## el dominio que se contorna no se extiende más allá de estos centros de píxeles.
im = axs[3].imshow(Z, interpolation='nearest', extent=extent,
                   cmap=cmap, norm=norm)
axs[3].contour(Z, levels, colors='k', origin='image', extent=extent)
ylim = axs[3].get_ylim()
axs[3].set_ylim(ylim[::-1])
axs[3].set_title("Origen de rc, eje y invertido")
fig.colorbar(im, ax=axs[3])

fig.tight_layout()
plt.show()

Mostrar la imagen de contorno

En este paso, mostrará la imagen de contorno.

fig.tight_layout()
plt.show()

Resumen

En este laboratorio, aprendió cómo crear una imagen de contorno utilizando la biblioteca Matplotlib de Python. Comenzó importando las bibliotecas necesarias, definiendo los datos que se van a representar, creando la imagen de contorno y mostrando la imagen. La imagen de contorno es una técnica de visualización útil que se puede utilizar para representar una superficie tridimensional utilizando una representación bidimensional.