访问量: 236 次浏览
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()
结果大概是这样子的:
