¿Cómo trazar un mapa de densidad en python?

Tengo un archivo .txt que contiene los valores x, y de los puntos espaciados regularmente en un mapa 2D, la tercera coordenada es la densidad en ese punto.

4.882812500000000E-004 4.882812500000000E-004 0.9072267 1.464843750000000E-003 4.882812500000000E-004 1.405174 2.441406250000000E-003 4.882812500000000E-004 24.32851 3.417968750000000E-003 4.882812500000000E-004 101.4136 4.394531250000000E-003 4.882812500000000E-004 199.1388 5.371093750000000E-003 4.882812500000000E-004 1278.898 6.347656250000000E-003 4.882812500000000E-004 1636.955 7.324218750000000E-003 4.882812500000000E-004 1504.590 8.300781250000000E-003 4.882812500000000E-004 814.6337 9.277343750000000E-003 4.882812500000000E-004 273.8610 

Cuando trazo este mapa de densidad en gnuplot, con los siguientes comandos:

 set palette rgbformulae 34,35,0 set size square set pm3d map splot "dens_map.map" u 1:2:(log10($3+10.)) title "Density map"` 

Lo que me da esta bella imagen:

introduzca la descripción de la imagen aquí

Ahora me gustaría tener el mismo resultado con matplotlib.

Este es mi objective de una respuesta más completa que incluye la elección del mapa de color y una normalización logarítmica del eje de color.

 import matplotlib.pyplot as plt import matplotlib.cm as cm from matplotlib.colors import LogNorm import numpy as np x, y, z = np.loadtxt('data.txt', unpack=True) N = int(len(z)**.5) z = z.reshape(N, N) plt.imshow(z+10, extent=(np.amin(x), np.amax(x), np.amin(y), np.amax(y)), cmap=cm.hot, norm=LogNorm()) plt.colorbar() plt.show() 

Supongo que aquí sus datos pueden transformarse en una matriz 2d por una simple reforma. Si este no es el caso, debe trabajar un poco más para obtener los datos de esta forma. El uso de imshow y no pcolormesh es más eficiente aquí si los datos se encuentran en una cuadrícula (como parece hacerlo). El fragmento de código anterior da como resultado la siguiente imagen, que se acerca bastante a lo que querías:

Imagen resultante

El comentario de @HYRY es bueno, pero una respuesta mínima de trabajo completa (¡con una imagen!) Es mejor. Utilizando plt.pcolormesh

 import pylab as plt import numpy as np # Sample data side = np.linspace(-2,2,15) X,Y = np.meshgrid(side,side) Z = np.exp(-((X-1)**2+Y**2)) # Plot the density map using nearest-neighbor interpolation plt.pcolormesh(X,Y,Z) plt.show() 

introduzca la descripción de la imagen aquí

Si los datos se parecen a su muestra, numpy puede cargarlos con el comando numpy.genfromtext .