绘制地图在python中主要用到的 basemap 库,这个库是 matplotlib 库中一个用于在 Python 中绘制地图上的 2D 数据的工具包。
首先安装库:
1、安装 geos 库:Python 的 basemap 库是建立在 geos 中的,所以得先安装 geos,cmd 命令下,定位到 pip 所在的文件夹,使用 pip 命令安装。
pip install geos
2.安装 pyproj、basemap 库:下载 pyproj 和 basemap 两个包的 whl 文件,使用 pip 命令安装 pyproj 和 basemap 库。
whl 文件下载地址如下:
http://www.lfd.uci.edu/~gohlke/pythonlibs/
找出与python版本对应的whl 文件下载,然后再cmd中进入到whl 文件的目录下进行pip安装
pip install pyproj-1.9.6-cp35-cp35m-win_amd64.whl
pip install basemap-1.2.0-cp35-cp35m-win_amd64.whl 
导入库:
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
from matplotlib.patches import Polygon 
创建黑白色世界平面图:
map = Basemap()#新建一张世界地图
map.drawcoastlines()#画出海岸线
plt.show()#打开窗口显示运行结果 

创建世界球形图并给大地和湖泊加上颜色:
plt.figure(figsize=(10,7))#定义图的大小
m = Basemap(projection='ortho',lat_0=0,lon_0=0)#创建世界地图并增加投影
m.drawmapboundary(fill_color='aqua')#给地球涂上蓝色
m.fillcontinents(color='coral',lake_color='aqua')#给大地和海洋涂上颜色
m.drawcoastlines()#画海岸线
plt.show() 
 

 
创建中国地图:
下载 中国 China 和 台湾 Taiwan 的 Shapefile 文件,注意还需要在Country的下拉框中选择台湾
网址如下:https://gadm.org/download_country_v3.htm

下载文件解压后用 readshapefile 方法读取下载的文件。
plt.figure(figsize=(16, 7))   # 定义图的大小
m = Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc',
            lat_1=33, lat_2=45, lon_0=100)    # 创建中国地图
m.drawcountries(linewidth=1.5)   # 画出中国地图
m.readshapefile(r'C:\PyProject\learn\小技巧\地图\China\gadm36_CHN_1', 'states', drawbounds=True)
m.readshapefile(r'C:\PyProject\learn\小技巧\地图\TaiWan\gadm36_TWN_1', 'taiwan', drawbounds=True)
m.drawmapboundary(fill_color='aqua')        # 给地球涂上蓝色
m.fillcontinents(color='coral', lake_color='aqua')  # 给大陆和海洋分别涂上颜色
m.drawcoastlines()            # 画海岸线
# 给中国加上鲜艳颜色
ax = plt.gca()
for nshape, seg in enumerate(m.states):
    poly = Polygon(seg, facecolor='r')
    ax.add_patch(poly)
# 台湾不要忘了
m.readshapefile('C:\PyProject\learn\小技巧\地图\TaiWan\gadm36_TWN_1', 'taiwan', drawbounds=True)
for nshape, seg in enumerate(m.taiwan):
    poly = Polygon(seg, facecolor='r')
    ax.add_patch(poly)
plt.show() 

来源:oschina
链接:https://my.oschina.net/u/4403037/blog/3634371