pcolormesh рисует не точки, а линии между точками данных

Мне нужно нанести данные сумм дождя (из спутниковых наблюдений) на карту из файлов grib2. Наконец, мне удалось загрузить данные через текстовые файлы в массивы numpy и связать их с координатами изображения с помощью Basemap. Но проблема в том, что Python не помещает цветные точки из данных, а имеет тенденцию рисовать линии между соседними точками в поле данных, поэтому график выглядит некрасиво. Я не вижу источника проблемы.

Фрагменты моего кода:

import numpy as np
import matplotlib
matplotlib.use('Agg')
from scipy import *
from pylab import *
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import cm

После этого я читаю необходимые данные и создаю 3 массива numpy с формами приблизительно (100000, 2), которые содержат соответственно широту, долготу, в градусах и значение каждой точки данных. Я визуализирую это с помощью этих команд:

def joonista(lats,lons,value,nimi,clevs,koloriit):

--------- фрагмент описанного преобразования (не показан), формирует массивы «lats», «lons», «value» ------------

map=Basemap(projection='aea',lat_1=30,lat_2=50,lat_0=45,lon_0=0,llcrnrlon=-30,llcrnrlat=20,urcrnrlon=80,urcrnrlat=53,resolution='l',)

x, y = map(lons, lats)
map.drawcoastlines(linewidth=0.17,color='0.7')
map.drawcountries(linewidth=0.17,color='0.7')
map.drawmeridians(np.arange(-50,60,5),linewidth=0.17,color='0.7',labels=[False,False,False,True])
map.drawparallels(np.arange(-25, 70, 5),linewidth=0.17,color='0.7',labels=[True,False,False,False])
varvid=mpl.colors.ListedColormap(koloriit)
norm = mpl.colors.BoundaryNorm(clevs,varvid.N)
cs = map.pcolormesh(x,y,value,cmap=varvid,norm=norm)
savefig(nimi,dpi=300)
plt.clf()

joonista(latA,lonA,valueA,'h05',[-1,0.00001,0.001,0.01,0.1,0.3,0.5,1,2,3,4,5,6,7,8,9,10,11,12,13],['k','c','#a0fff9','#00b354','#69b300','#97ff03','#C2524D','#FF7500','#b3a900','#fff551','#515bff','#45adff','#da000d','#ff2a36','#ffa0a5','#f003ff','#f778ff','0.5','0.75'])
joonista(latB,lonB,valueB,'h04',[-1,0.0000000000001,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18],['k','c','#a0fff9','#00b354','#69b300','#97ff03','#C2524D','#FF7500','#b3a900','#fff551','#515bff','#45adff','#da000d','#ff2a36','#ffa0a5','#f003ff','#f778ff','0.5','0.75'])

Вот пример изображения:

Пример

Буду признателен, если мне подскажут, как решить эту проблему.

Алексей


person Aleksei Va    schedule 11.04.2013    source источник
comment
Вы можете загрузить изображение где-нибудь, например, imgur.com, и опубликовать URL-адрес.   -  person Lev Levitsky    schedule 11.04.2013
comment
Спасибо, Лев, я добавил картинку на imgur.com: alekseiva.imgur.com/all / # _ = _   -  person Aleksei Va    schedule 11.04.2013
comment
Похоже, у вас есть неупорядоченные точки. Вам нужно их интерполировать. pcolormesh явно предполагает, что ваши точки находятся на регулярной сетке. Если вы хотите построить точки с цветовой кодировкой, используйте scatter (например, plt.scatter(x, y, c=value)).   -  person Joe Kington    schedule 11.04.2013
comment
Джо, спасибо, я заменил pcolormesh, как вы предложили: cs = plt.scatter (x, y, c = value, s = 0.6, edgecolors = 'none', marker = ',', cmap = varvid, norm = норма) и получилась отличная картинка!   -  person Aleksei Va    schedule 11.04.2013
comment
@AlekseiVa Можете ли вы опубликовать свой последний комментарий в качестве ответа (и принять его)?   -  person tacaswell    schedule 11.04.2013


Ответы (1)


По рекомендации Джо Кингтона я заменил команду

cs=map.pcolormesh(x,y,value,cmap=varvid,norm=norm)

по команде

cs=plt.scatter(x,y,c=value,s=0.6, edgecolors='none',marker=',',cmap=varvid,norm=norm)

который хорошо визуализирует распределение осадков.

Спасибо за содействие!

person Aleksei Va    schedule 11.04.2013