python - Trazado de isolinas/contornos en matplotlib a partir del conjunto de datos(x, y, z)
contour (1)
Hola, soy nuevo en programación y estoy tratando de hacer algo que probablemente sea realmente obvio, pero por mi vida no puedo entenderlo. Tengo una serie de datos x, y, z (en mi caso, correspondientes a la distancia, profundidad y pH). Me gustaría trazar isolinas de los datos z (pH) en una cuadrícula xy (distancia, profundidad) usando matplotlib. ¿Hay alguna forma de hacer esto? Gracias.
La solución dependerá de cómo estén organizados los datos.
Datos en cuadrícula regular
Si los datos
x
e
y
ya definen una cuadrícula, se pueden cambiar fácilmente a una cuadrícula cuadrilátera.
P.ej
#x y z
4 1 3
6 1 8
8 1 -9
4 2 10
6 2 -1
8 2 -8
4 3 8
6 3 -9
8 3 0
4 4 -1
6 4 -8
8 4 8
puede trazarse como un
contour
usando
import matplotlib.pyplot as plt
import numpy as np
x,y,z = np.loadtxt("data.txt", unpack=True)
plt.contour(x.reshape(4,3), y.reshape(4,3), z.reshape(4,3))
Datos arbitrarios
(a)
En caso de que los datos no se encuentren en una cuadrícula cuadrilateral, se pueden interpolar los datos en una cuadrícula.
Matplotlib proporciona un método para hacerlo, utilizando
matplotlib.mlab.griddata
.
import matplotlib.mlab
xi = np.linspace(4, 8, 10)
yi = np.linspace(1, 4, 10)
zi = matplotlib.mlab.griddata(x, y, z, xi, yi, interp=''linear'')
plt.contour(xi, yi, zi)
(b)
Finalmente, uno puede trazar un contorno completamente sin el uso de una cuadrícula cuadrilátera.
Esto se puede hacer usando
tricontour
.
plt.tricontour(x,y,z)
Un ejemplo que compara los dos últimos métodos se encuentra en la página matplotlib .