python利用basemap叠加地图

来源:互联网 发布:幸运28算法 编辑:程序博客网 时间:2024/04/29 23:52
<span style="font-family:SimSun;"># -*- coding: utf-8 -*-'''Created on Sat Sep 19 16:22:59 2015@author: liangxw'''from __future__ import divisionimport matplotlib.pyplot as pltimport numpy as npimport matplotlib as mplfrom mpl_toolkits.basemap import Basemap</span>
<span style="font-family:SimSun;">from matplotlib.font_manager import FontProperties    #使能够显示中文</span>
<span style="font-family:SimSun;"></span>
<span style="font-family:SimSun;">font = FontProperties(fname=r"c:\windows\fonts\simsun.ttc", size=14)    #设置中文字体的路径和大小</span>
<span style="font-family:SimSun;">fig = plt.figure()</span>
<span style="font-family:SimSun;">ax1 = fig.add_axes([0.10, 0.10, 0.80, 0.8])    #用于绘制地图ax2 = fig.add_axes([0.85, 0.10, 0.04, 0.8])    #用于绘制colorbar</span>
<span style="font-family:SimSun;">#首先绘制地图map = Basemap(projection = 'cyl',    #投影方式 </span>
<span style="font-family:SimSun;">              resolution = 'l',      #分辨率</span>
<span style="font-family:SimSun;">              llcrnrlon = 115.0, llcrnrlat = 29.7, urcrnrlon = 119.6, urcrnrlat = 34.3,    #经纬度范围,460*460的网格</span>
<span style="font-family:SimSun;">              ax=ax1)    #绘制区域shapeinfo = map.readshapefile('bou2_4p', 'bou2_4p')    #叠加行政区划#添加横纵经纬网格线条map.drawparallels(np.arange(30,34+1), labels=[1,0,0,0])     #四个labels分别表示左右上下map.drawmeridians(np.arange(115,119+1), labels=[0,0,0,1])</span>
<span style="font-family:SimSun;">#之后在地图上绘制数据</span>
<span style="font-family:SimSun;">#首先生成460*460的经纬度网格lons = np.arange(115.0, 119.6, 0.01)lats = np.arange( 34.3,  29.7, -0.01)X, Y = np.meshgrid(lons, lats) </span>
<span style="font-family:SimSun;">   levels=[0,3,6,10,20,30,40,50,60,80,100,200]    #色标范围#自定义色标值colors=(np.array([255,255,255])/255, np.array([102,153,255])/255, np.array([  0,  0,255])/255, np.array([ 51,204,102])/255,        np.array([  0,102, 51])/255, np.array([204,255,102])/255, np.array([255,255,  0])/255, np.array([153,102, 51])/255,        np.array([255,153,102])/255, np.array([255,102,153])/255, np.array([250,  0,  0])/255)#绘制数据     cf = map.contourf( X, Y, Data/5,levels,colors=colors)</span>
<span style="font-family:SimSun;">#最后绘制colorbar</span>
<span style="font-family:SimSun;">#方法1cb = map.colorbar(cf,"right",  size="5%", pad='2%',ticks=levels)plt.title(u'方式1',fontproperties=font)#ax1.set_title(u'方式1',fontproperties=font)</span>
</pre><pre name="code" class="python"><pre name="code" class="python"><span style="font-family:SimSun;">#方法2</span>
cmap = mpl.colors.ListedColormap(colors[:-1])cmap.set_over((250/255, 0, 0))cb = mpl.colorbar.ColorbarBase(ax2, cmap=cmap,orientation='vertical',extend='max')cb.set_ticks((0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1))cb.set_ticklabels( ('0','3','6','10','20','30','40','50','60','80','100mm/h'))ax1.set_title(u'方式2',fontproperties=font)
                                             
0 0