наложение базовой карты на контуры

Этот вопрос является продолжением более раннего вопроса и от @JoeKington. Оба этих решения отлично работают для моих нужд. Однако я пытаюсь наложить базовую карту на контуры. Следуя приведенному здесь примеру http://matplotlib.org/basemap/users/examples.html , я, похоже, не ошибаюсь. Я думаю, что моя основная проблема – преобразовать значения контура x, y в координаты карты. Я воспроизвожу ниже коды для 1) контуров (как указано @usethedeathstar, который работает очень хорошо) и 2) объект карты и график.

#!/usr/bin/python from mpl_toolkits.basemap import Basemap import numpy as np from scipy.interpolate import griddata class d(): def __init__(self): A0 = open("meansr2.txt","rb") # A1 = A0.readlines() A = np.zeros((len(A1),3)) for i, l in enumerate(A1): li = l.split() A[i,0] = float(li[0]) A[i,1] = float(li[1]) A[i,2] = float(li[2]) self.Lon = A[:,0] self.Lat = A[:,1] self.Z = A[:,2] data = d() numcols, numrows = 300, 300 xi = np.linspace(data.Lon.min(), data.Lon.max(), numrows) yi = np.linspace(data.Lat.min(), data.Lat.max(), numcols) xi, yi = np.meshgrid(xi, yi) x, y, z = data.Lon, data.Lat, data.Z points = np.vstack((x,y)).T values = z wanted = (xi, yi) zi = griddata(points, values, wanted) 

Определение объекта карты

 m = Basemap(projection = 'merc',llcrnrlon = 21, llcrnrlat = -18, urcrnrlon = 34, urcrnrlat = -8, resolution='h') m.drawcountries(linewidth=0.5, linestyle='solid', color='k', antialiased=1, ax=None, zorder=None) m.drawmapboundary(fill_color = 'white') m.fillcontinents(color='coral',lake_color='blue') parallels = np.arange(-18, -8, 2.) m.drawparallels(parallels, color = 'black', linewidth = 0.5, labels=[True,False,False,False]) meridians = np.arange(22,34, 2.) m.drawmeridians(meridians, color = '0.25', linewidth = 0.5, labels=[False,False,False,True]) import pylab as plt 

попытка преобразовать форму lat / lon для сопоставления координат #lat = list (data.Lat) #lon = list (data.Lon) #x, y = m (lon, lat) comment: contourf используется с (x, y , zi), то все приведенные выше определения переписываются с xi, # yi, включая множество разных попыток переопределить x, y и lon, lat.J

Функции графика

 fig = plt.figure(0, figsize=(8,4.5)) im = plt.contourf(xi, yi, zi) plt.scatter(data.Lon, data.Lat, c= data.Z) plt.colorbar() plt.show() 

Вышеприведенные данные дают два участка бок о бок. Вот некоторые данные в случае необходимости тестирования

 Lon Lat Z Z2 pos 32.6 -13.6 41 9 CHIP 27.1 -16.9 43 12 CHOM 32.7 -10.2 46 14 ISOK 24.2 -13.6 33 13 KABO 28.5 -14.4 43 11 KABW 28.1 -12.6 33 16 KAFI 27.9 -15.8 46 13 KAFU 24.8 -14.8 44 9 KAOM 31.1 -10.2 35 14 KASA 25.9 -13.5 24 8 KASE 29.1 -9.8 10 13 KAWA 25.8 -17.8 39 11 LIVI 33.2 -12.3 44 8 LUND 28.3 -15.4 46 12 LUSA 27.6 -16.1 47 9 MAGO 28.9 -11.1 31 15 MANS 31.3 -8.9 39 9 MBAL 31.9 -13.3 45 9 MFUW 23.1 -15.3 31 9 MONG 31.4 -11.9 39 9 MPIK 27.1 -15.0 42 12 MUMB 24.4 -11.8 15 9 MWIN 28.6 -13.0 39 9 NDOL 31.3 -14.3 44 12 PETA 23.3 -16.1 39 5 SENA 30.2 -13.2 38 11 SERE 24.3 -17.5 32 10 SESH 26.4 -12.2 23 12 SOLW 23.1 -13.5 27 14 ZAMB 

Любая помощь будет оценена

Я хотел бы поблагодарить всех тех, кто посмотрел на мою проблему и, возможно, попытался поработать над этим. Посредством последовательных попыток я обратил на себя внимание, что наложение базовой карты на контуры фактически работает со следующими строками. После определения объекта карты

 m = Basemap(projection = 'merc',llcrnrlon = 21, llcrnrlat = -18, urcrnrlon = 34, urcrnrlat = -8, resolution='h') 

у меня есть

 x, y = m(xi, yi) fig=plt.figure(figsize=(8,4.5)) cs = m.contour(x,y,zi,colors='b',linewidths=1.) 

Контур (x, y, zi) отображает контуры на карте. Поскольку я использовал контур, мне все же нужно выяснить, почему контур не дает мне заполненные контуры. Большое вам спасибо за терпение и терпимость.

Python - лучший язык программирования в мире.