摘要: Basemap主要是将位置的经纬度坐标转换到图中的坐标的,因此要绘制某一个省的地图,需要知道对应的轮廓线信息,在Basemap中,它是通过shapefile来实现的。因此我们首先需要得到相关的文件信息,并再将其导入Basemap中就可以了。相关的shapefi...
Basemap主要是将位置的经纬度坐标转换到图中的坐标的,因此要绘制某一个省的地图,需要知道对应的轮廓线信息,在Basemap中,它是通过shapefile来实现的。因此我们首先需要得到相关的文件信息,并再将其导入Basemap中就可以了。相关的shapefile可以从GADM(http://www.gadm.org)中下载,不过网站不太容易打开。具体过程如下:
#-*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.basemap import Basemap from matplotlib.patches import Polygon fig = plt.figure() ax1 = fig.add_axes([0.1,0.1,0.8,0.8]) bmap = Basemap(llcrnrlon=115,llcrnrlat=23,urcrnrlon=121,urcrnrlat=29, projection='lcc',lat_1=33,lat_2=45,lon_0=120, ax=ax1) shp_info = bmap.readshapefile('CHN_adm/CHN_adm3','states',drawbounds=False) for info, shp in zip(bmap.states_info, bmap.states): proid = info['NAME_1'] if proid == 'Fujian': poly = Polygon(shp,facecolor='w',edgecolor='b', lw=0.2) ax1.add_patch(poly) bmap.drawcoastlines() bmap.drawcountries() bmap.drawparallels(np.arange(23,29,2),labels=[1,0,0,0]) bmap.drawmeridians(np.arange(115,121,2),labels=[0,0,0,1]) plt.title('Fujian Province') plt.savefig('fig_province.png', dpi=100, bbox_inches='tight') plt.clf() plt.close()
结果大概是这样子的: