Mapa de calor de dibujo en python

Tengo dos listas que representan las coordenadas x, y en 2D. Por ejemplo, x = [1,4,0.5,2,5,10,33,0.04] y y = [2,5,44,0.33,2,14,20,0.03] . x[i] y y[i] representan un punto en 2D. Ahora también tengo una lista que representa los valores de “calor” para cada punto (x, y), por ejemplo, z = [0.77, 0.88, 0.65, 0.55, 0.89, 0.9, 0.8,0.95] . Por supuesto, x, y y z son mucho más dimensionales que el ejemplo.

Ahora me gustaría trazar un mapa de calor en 2D donde xey representan las coordenadas del eje yz representa el color. ¿Cómo se puede hacer esto en python?

Este código produce un mapa de calor. Con unos pocos puntos de datos más, la ttwig se ve bastante bonita y en general me parece que es muy rápida, incluso para más de 100k puntos.

 import matplotlib.pyplot as plt import matplotlib.tri as tri import numpy as np import math x = [1,4,0.5,2,5,10,33,0.04] y = [2,5,44,0.33,2,14,20,0.03] z = [0.77, 0.88, 0.65, 0.55, 0.89, 0.9, 0.8, 0.95] levels = [0.7, 0.75, 0.8, 0.85, 0.9] plt.figure() ax = plt.gca() ax.set_aspect('equal') CS = ax.tricontourf(x, y, z, levels, cmap=plt.get_cmap('jet')) cbar = plt.colorbar(CS, ticks=np.sort(np.array(levels)),ax=ax, orientation='horizontal', shrink=.75, pad=.09, aspect=40,fraction=0.05) cbar.ax.set_xticklabels(list(map(str,np.sort(np.array(levels))))) # horizontal colorbar cbar.ax.tick_params(labelsize=8) plt.title('Heat Map') plt.xlabel('X Label') plt.ylabel('Y Label') plt.show() 

Produce esta imagen:

introduzca la descripción de la imagen aquí

o si está buscando un cambio de color más gradual, cambie la línea de tricontourf a esto:

 CS = ax.tricontourf(x, y, z, np.linspace(min(levels),max(levels),256), cmap=cmap) 

y luego la ttwig cambiará a:

introduzca la descripción de la imagen aquí

En función de esta respuesta , es posible que desee hacer algo como:

 import numpy as np from matplotlib.mlab import griddata import matplotlib.pyplot as plt xs0 = [1,4,0.5,2,5,10,33,0.04] ys0 = [2,5,44,0.33,2,14,20,0.03] zs0 = [0.77, 0.88, 0.65, 0.55, 0.89, 0.9, 0.8,0.95] N = 30j extent = (np.min(xs0),np.max(xs0),np.min(ys0),np.max(ys0)) xs,ys = np.mgrid[extent[0]:extent[1]:N, extent[2]:extent[3]:N] resampled = griddata(xs0, ys0, zs0, xs, ys, interp='linear') plt.imshow(np.fliplr(resampled).T, extent=extent,interpolation='none') plt.colorbar() 

introduzca la descripción de la imagen aquí

El ejemplo aquí también podría ayudar: http://matplotlib.org/examples/pylab_examples/griddata_demo.html