2015-05-14 15 views
6

Tanımlı bir coğrafi konum üzerinde dağınık bir ısı haritası çizmeye çalışıyorum. Normal dağınık bir haritayı arka plan olmadan çok iyi çizebilirim ama bunu belirli bir lat ve lon ile birleştirmek istiyorum. Aşağıdaki boş harita enter image description here olsun.Başucu Isı hatası/boş harita

Girdi

Girdi: 19.997453, boylam: 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() 

Hata Yok Ama col[2] ve col[3]x ve y ko koordine & Coğrafi Yer Lat vardır sadece boş haritayı görmek ama yok yok Bunun üzerine veri çizimi.

Nasıl düzeltilir? Teşekkürler !!

+3

Matplotlib m.imshow 'şikayetçi olan (veriler, interpolasyon = none)'. "Data" dizisi, şekle sahiptir (N, 6). Bu bir görüntü olarak yorumlanamaz. Son boyutun rgb değerlerini temsil ettiği, şekil (N, M, 3) gibi bir şey gibi bir piksel değerleri ızgarası beslemeniz gerekir. – wflynny

+3

Aynı zamanda haftalarca bunu planlamaya çalışmışsınız gibi görünüyor ... [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

Coğrafi konumunuz için herhangi bir görüntü verisi var mı? – wflynny

cevap

2

Şimdi anlıyorum. here-imshow ve here-hexbin'dan aldığınız yanıtları birleştirmeye çalışıyorsunuz.

Sorununuz, Ana Haritanızı 2B histogramınızı çizdiğiniz "kanvas" olarak kullanmak istediğiniz gerçeğinize dayanmaktadır. Fakat bunu yapmak yerine, bir Ana harita hazırlıyorsunuz ve daha sonra bir 2D histogramını ayrı olarak çiziyorsunuz ('u kullanarak Ana Haritanızdan ayrı bir kanvas oluşturuyorsunuz).

m.hexbin kullanın ve plt.imshow()'dan kurtulun. Eğer gerçekten imshow'u kullanmak istiyorsanız, önce ayrı bir 2D histogram dizisi oluşturmanız ve ardından imshow ile çizmeniz gerekecektir. Aşağıda, hexbin ile nasıl ilerleyeceğim.


DÜZENLEME: bazı x, y, z veri randomize Aşağıda bu yüzden bir arsa yapmak (ve daha büyük sahillerinde yapılan) olabilir. Mükemmel değil, ama çizilen verileri gösterir.

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

Kesinlikle .. Çok teşekkür ederim .. Küçük hatalar görüyorlar ama büyük bir fark yaratıyorlar. Yukarıdaki kodu şimdi deniyorum .. –

+1

Boş bir harita alıyorum :(tam çözüm yolumu deneyecek ..Çözümler için çok teşekkür ederim. Col [1] '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' –

+1

@SitzBlogz Evet, eğer basemapın büyüklüğüne bakarsanız ve o zaman hexgrid'inizdeki sınırlara bakarsanız, bunlar çok daha farklıdır. Hexgrid'iniz görünebilir, ama Basemap'ın sol alt köşesinde (Doğu Afrika'da bir yerlerde) son derece küçük bir ızgara şeklinde olabilir. – wflynny