2015-05-14 22 views
6

Sto provando a tracciare una mappa di calore sparsa su una posizione geografica definita. Posso benissimo tracciare una normale mappa sparsa senza sfondo, ma voglio combinarla con un dato lat e lon. Prendo la seguente mappa vuota enter image description here.Errore di heat della mappa di base/mappa vuota

ingresso

ingresso: col[2] e col[3] sono i x e y co ordinate & Geo Località Lat: 19.997453, Lon: 73.789802

000000000023 61.0 19.006113 73.009168 
000000000054 65.0 19.009249 73.000342 
000000000003 19.0 19.001051 73.000080 
000000000012 20.0 19.009390 73.008638 
000000000061 82.0 19.008550 73.003605 
000000000048 86.0 19.006597 73.001057 
00000000005d 60.0 19.003857 73.009618 
000000000006 60.0 19.003370 73.009112 
000000000037 91.0 19.002558 73.000546 
000000000047 32.0 19.006061 73.008239 

programma

from matplotlib import pyplot as plt 
from matplotlib import cm as CM 
from matplotlib import mlab as ml 
from mpl_toolkits.basemap import Basemap 
import numpy as np 

m = Basemap(width=12000000, height=9000000, projection='lcc', 
      resolution='c', lat_0=19.,lon_0=73.) 
m.drawcoastlines(linewidth=0.25) 

data = np.loadtxt('random_lat_lon_0', unpack=True, 
        dtype='str, float, float, float') 

x = data[2] 
y = data[3] 
z = data[1] 

gridsize = 100 
m.hexbin(x, y, C=z, gridsize=gridsize) 

cb = m.colorbar() 
#m.set_label('Density') 
plt.show() 

nessun errore ma io vedere solo la mappa vuota ma nessuna sca trama di dati su questo.

Come risolvere? Grazie !!

+3

Matplotlib si lamenta a 'm.imshow (dati, interpolazione = 'none')'. L'array 'data' ha forma' (N, 6) '. Questo non può essere interpretato come un'immagine. Devi nutrire 'imshow' una griglia di valori di pixel, come qualcosa della forma' (N, M, 3) 'dove l'ultima dimensione rappresenta i valori di rgb. – wflynny

+3

Sembra anche che tu abbia provato a tracciare questo per settimane ... [1] (https://stackoverflow.com/questions/29880531/wrong-output-for-heat-map/29884481#29884481), [ 2] (https://stackoverflow.com/questions/29880531/wrong-output-for-heat-map), [3] (https://stackoverflow.com/questions/30068049/multi-colored-heat-map- error-python) – wflynny

+1

Hai qualche immagine per la tua geolocalizzazione? – wflynny

risposta

2

Ora capisco. Stai cercando di combinare le risposte ricevute da here-imshow e here-hexbin.

Il tuo problema si riduce al fatto che vuoi utilizzare la mappa di base come "tela" su cui traccia il tuo istogramma 2D. Ma invece di farlo, stai facendo una mappa di base e poi traccia un istogramma 2D separatamente (usando plt.hexbin che crea una tela separata dalla tua mappa di base).

Utilizzare m.hexbin e liberare plt.imshow(). Se vuoi veramente usare imshow, dovrai prima creare un array di istogrammi 2D separatamente, quindi tracciarlo con imshow. Di seguito è come procedere con hexbin.


EDIT: Sotto ho randomizzati alcuni x, y, z dati così ho potuto fare una trama (e fatto le coste più grande). Non è perfetto, ma mostra i dati tracciati.

from matplotlib import pyplot as plt 
from matplotlib import cm as CM 
from matplotlib import mlab as ml 
from mpl_toolkits.basemap import Basemap 
import numpy as np 

m = Basemap(width=12000000, height=9000000, projection='lcc', 
      resolution='c', lat_0=19.,lon_0=73.) 
m.drawcoastlines(linewidth=0.25) # I added color='red', lw=2.0 

#data = np.loadtxt('inputfile', unpack=True, 
        dtype='str, int, int, int, int, float') 
# 
#x = data[1] 
#y = data[2] 
#z = data[5] 
x, y, z = np.random.rand(3, 1000000) 
x *= 12e6 
y *= 9e6 
z *= 20000 

gridsize = 100 
m.hexbin(x, y, C=z, gridsize=gridsize, cmap=plt.cm.YlGnBu) 

cb = m.colorbar() 
m.set_label('Density') 
plt.show() 

enter image description here

+0

Esattamente .. Grazie mille .. Sembrano errori minori ma fanno una grande differenza. provando il codice sopra ora .. –

+1

Sto ottenendo una mappa vuota :(proverò la mia strada verso la soluzione completa ..Grazie mille per le soluzioni. Può essere coz il 'col [1]' e 'col [2]' non sono esatti 'lat' e' long' quelli che sto dando per la mappa di base. –

+1

@SitzBlogz Sì, se osservate le dimensioni della mappa di base e quindi i limiti sul vostro hexgrid, sono molto diversi. Il tuo hexgrid può essere visualizzato, ma come una griglia estremamente piccola nell'angolo in basso a sinistra della Basemap (da qualche parte nell'Africa orientale?) – wflynny

Problemi correlati