Tengo una .archivo txt que contiene la x,y valores de puntos regularmente espaciados en un mapa 2D, el 3 de coordinar siendo 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 me parcela de 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"`

Que me da esta bella imagen:

Cómo trazar un mapa de densidad en python?

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

  • Por favor, ver aquí para ver un ejemplo. Estos son normalmente llamados «diagramas de contorno» o «mapas de calor» en matplotlib. También un desbordamiento de la pila de ejemplo.
  • remodelar cada columna a un M x N matriz, y pasar a pcolormesh().
InformationsquelleAutor user3722235 | 2014-06-09

2 Comentarios

  1. 19

    Aquí es mi objetivo en una respuesta más completa que incluye la elección de la mapa a color y logarítmica normalización 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()

    Asumo aquí que sus datos pueden ser transformados en una matriz 2d por un simple remodelar. Si este no es el caso de la que se necesita trabajar un poco más duro en la obtención de los datos en este formulario. El uso de imshow y no pcolormesh es más eficiente si los datos se encuentra en una cuadrícula (como parece hacer). El anterior fragmento de código resultados en la siguiente imagen, que viene bastante cerca de lo que quería:

    Cómo trazar un mapa de densidad en python?

  2. 11

    El comentario de @HYRY es buena, pero un completo mínima de trabajo de respuesta (con una foto!) es mejor. El uso de 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()

    Cómo trazar un mapa de densidad en python?

    Si los datos se parece a la muestra, numpy puede cargar usando el comando numpy.genfromtext.

    • Muchas gracias! El problema es que meshgrid no funciona al parecer debido a que las matrices son demasiado grandes. ¿Existe alguna alternativa a meshgrid?
    • Meshgrid era simplemente para crear los datos de la muestra para la trama. Que voy a recibir X,Y,Z de su archivo de datos. no Obstante, si sus datos si es grande (por ejemplo, mayor que el de la memoria), entonces usted necesitará para procesarlos para una mayor granularidad a nivel de. Yo no creo que este sea el caso ya que GNUplot puede manejar ya, aunque.
    • Me gustaría utilizar imshow en lugar de pcolormesh. La malla de las llamadas son más útiles cuando se dispone de forma irregular píxeles.
    • Ok hice prprocess mi mapa en un grueso de la palanca. Ahora meshgrid parece funcionar bien. Pero, ¿cómo puedo obtener la densidad de la matriz de la misma forma que X o Y?

Dejar respuesta

Please enter your comment!
Please enter your name here