2013-04-11 103 views
1

我需要将雨量总和(来自卫星观测)的数据绘制到grib2文件的地图上。最后,我设法通过文本文件将数据加载到numpy数组中,并使用Basemap将其与图片坐标绑定。但问题是,Python不会从数据中提取彩色点,但往往会在数据字段中的相邻点之间画线,所以情节看起来很难看。 我没有看到问题的根源。我的代码pcolormesh不绘制点但是数据点之间的线条

片段:

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

---------描述重塑(未示出),的片段产生阵列“拉特”,“LONS”,“值” ----- -------

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']) 

下面是一个例子图片:

Example

我将不胜感激,如果我牛逼旧的如何解决这个问题。

阿列克谢

+1

您可以将图片上传到imgur.com某处,并张贴URL。 – 2013-04-11 12:05:53

+0

谢谢你,列夫,我将图片添加到imgur.com:http://alekseiva.imgur.com/all/#_=_ – 2013-04-11 12:35:04

+2

它看起来像你有无序的点。你需要对它们进行插值。 'pcolormesh'明确假定你的点是在一个规则的网格上。如果你想绘制颜色编码的点,使用'scatter'(例如'plt.scatter(x,y,c = value)')。 – 2013-04-11 13:31:28

回答

1

使用乔金顿建议,我通过命令

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

其中井形象化沉淀分布替换命令

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

感谢您的协助!

相关问题