HOWTO · Matplotlib
Cómo crear gráficos de contorno en Matplotlib
Crea gráficos de contorno de líneas y rellenos en Matplotlib con una cuadrícula de NumPy, un campo escalar y una barra de color.
En esta página
Usa contour() de Matplotlib para dibujar líneas que conectan valores iguales en un campo escalar bidimensional, o contourf() para rellenar las regiones entre esas líneas. En ambos casos, NumPy permite crear la cuadrícula de coordenadas y calcular los valores que se van a representar; una barra de color muestra la correspondencia entre los colores y esos valores.
Usa el método contour() para crear un gráfico de contorno en Matplotlib
Un gráfico de contorno representa un campo escalar sobre un plano bidimensional. Los arreglos x e y proporcionan las coordenadas horizontal y vertical, mientras que z contiene el valor escalar de cada par de coordenadas. Cada línea de contorno conecta puntos en los que z tiene el mismo valor. Matplotlib usa juntos los elementos correspondientes de los tres arreglos: x[i, j] y y[i, j] ubican un punto, y z[i, j] proporciona su valor. Por tanto, las cuadrículas de coordenadas y el arreglo de valores deben tener formas bidimensionales compatibles.
El ejemplo usa numpy.linspace() para generar 500 coordenadas entre -2 y 2 en cada eje. np.meshgrid() convierte esas coordenadas unidimensionales en arreglos bidimensionales coincidentes, y z = np.sin(x) + np.cos(y) calcula un valor en cada posición de la cuadrícula. Consulta el método np.meshgrid() para obtener más información sobre cómo crear cuadrículas de coordenadas.
El siguiente ejemplo crea la cuadrícula, dibuja las isolíneas, añade una barra de color y abre la figura. El código se incluye para que puedas ejecutarlo; este borrador no tiene un resultado de ejecución adjunto.
import matplotlib.pyplot as plot
import numpy as np
x_values = np.linspace(-2, 2, 500)
y_values = np.linspace(-2, 2, 500)
x, y = np.meshgrid(x_values, y_values)
z = np.sin(x) + np.cos(y)
plot.contour(x, y, z)
plot.colorbar()
plot.show()
Los dos primeros argumentos de contour() son las cuadrículas de coordenadas y el tercero es el campo escalar. La función admite otros argumentos opcionales, como levels, que controla dónde se dibujan las líneas de contorno. Si se omite, Matplotlib elige los niveles según el rango de los datos. plot.colorbar() añade una escala para leer los valores del campo representados por los colores del gráfico. Resulta útil para interpretar una isolínea o comparar valores en distintas ubicaciones; los ejes siguen mostrando las coordenadas x e y.
Usa el método contourf() en Matplotlib
Usa contourf() para crear un gráfico de contorno relleno: colorea las regiones entre los niveles de contorno, mientras que contour() dibuja las líneas de contorno. Las entradas cumplen las mismas funciones en ambos métodos, así que puedes reutilizar la cuadrícula y el campo escalar del primer ejemplo. Un gráfico relleno puede facilitar la comparación de rangos amplios de valores, y su barra de color asigna una escala numérica a los colores. Este ejemplo completo también establece levels=30 y añade una barra de color. Se proporciona para que puedas ejecutarlo; este borrador no tiene un resultado de ejecución adjunto.
import matplotlib.pyplot as plot
import numpy as np
x_values = np.linspace(-2, 2, 500)
y_values = np.linspace(-2, 2, 500)
x, y = np.meshgrid(x_values, y_values)
z = np.sin(x) + np.cos(y)
filled = plot.contourf(x, y, z, levels=30, vmin=-1, vmax=0.5)
plot.colorbar(filled)
plot.show()
levels especifica los niveles de contorno y, por tanto, controla cómo se divide el campo en regiones coloreadas. En cambio, vmin y vmax establecen los límites de normalización del color; no eliminan valores de z ni eligen niveles de contorno. Los valores inferiores o superiores a esos límites siguen representándose y se asignan a los colores inferior o superior del mapa de colores. Con el mapa de colores predeterminado, esos colores son los de sus extremos, a menos que se definan colores inferior o superior personalizados.
En este ejemplo, los valores de z siguen formando parte del gráfico de contorno relleno aunque queden fuera del rango de color de -1 a 0.5. Usa levels para cambiar las divisiones del contorno y vmin o vmax para cambiar cómo se asignan los valores a la escala de color.