2015-05-14 15 views
6

Próbuję wykreślić mapę rozproszonego ciepła w określonej lokalizacji geograficznej. Mogę bardzo dobrze wykreślić normalną rozproszoną mapę bez tła, ale chcę ją połączyć z danym latem i lon. Dostaję następującą pustą mapę enter image description here.Błąd temperatury bazowej/pusta mapa

Wejście

Wejście: col[2] i col[3] są współ rzędnych x i y & Geo Lokalizacja Lat: 19.997453, dł: 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 

Program

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() 

Nie Błąd ale zobacz tylko pustą mapę, ale nie sca Na tym wykresie danych.

Jak naprawić? Dzięki !!

+3

matplotlib narzeka na 'm.imshow (dane, interpolacja = 'none')'. Tablica 'data' ma kształt' (N, 6) '. Nie można tego zinterpretować jako obrazu. Musisz podać 'imshow' siatkę wartości pikseli, np. Coś o kształcie' (N, M, 3) ', gdzie ostatni wymiar reprezentuje wartości rgb. – wflynny

+3

Wygląda również na to, że próbujesz to spisać od tygodni ... [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

Czy masz jakieś dane obrazu dla swojej geolokalizacji? – wflynny

Odpowiedz

2

Teraz rozumiem. Próbujesz połączyć odpowiedzi otrzymane od here-imshow i here-hexbin.

Twój problem sprowadza się do faktu, że chcesz użyć swojej mapy bazowej jako "płótna", na którym narysujesz swój histogram 2D. Zamiast tego tworzysz mapę bazową, a następnie oddzielnie rysujesz histogram 2D ​​(używając plt.hexbin, który tworzy oddzielne płótno od twojej mapy bazowej).

Użyj m.hexbin i pozbądź się plt.imshow(). Jeśli naprawdę chcesz użyć imshow, musisz najpierw utworzyć osobną tablicę histogramów 2D, a następnie narysować ją za pomocą programu imshow. Poniżej znajduje się sposób postępowania z hexbin.


EDIT: Poniżej losowo kilka x, y, z, to dane mogą uczynić wykres (i wprowadzeniu brzegowe większe). Nie jest doskonały, ale pokazuje dane naniesione.

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

Dokładnie .. Dziękuję bardzo .. Wyglądają na drobne błędy, ale robią wielką różnicę. wypróbowanie powyższego kodu teraz .. –

+1

Otrzymuję pustą mapę :(spróbuję mojej drogi do pełnego rozwiązania ..Dziękuję bardzo za rozwiązania. Może być coz 'col [1]' i 'col [2]' nie są dokładnymi 'lat' i' long' tymi, które daję dla mapy bazowej. –

+1

@SitzBlogz Tak, jeśli spojrzysz na rozmiar mapy bazowej, a następnie na twój hexgrid, są one bardzo różne. Twój hexgrid może się wyświetlać, ale jako niezwykle mała siatka w lewym dolnym rogu mapy bazowej (gdzieś w Afryce Wschodniej?) – wflynny