python 用 basemap 逐步绘制中国地图详解

0、import

import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from mpl_toolkits.basemap import Basemap

 

1、有国界线和海岸线的黑白风地图

fig = plt.figure(figsize=(12, 8),    # 画布尺寸
                 facecolor='cornsilk'    # 画布背景色
                )

# 绘制地图
m = Basemap(projection='lcc',    # 投影类型
            llcrnrlon=77, llcrnrlat=14,    # 左下角经纬的
            urcrnrlon=148, urcrnrlat=57,    # 右上角经纬度
            lat_1=33, lat_2=45, lon_0=100    # 
           )
m.drawcoastlines()    # 海岸线
m.drawcountries()    # 国界线

plt.show()

地图:

 

 2、添加省界线

fig = plt.figure(figsize=(12, 8),    # 画布尺寸
                 facecolor='cornsilk'    # 画布背景色
                )
ax = plt.gca()   # 获取当前绘图区的坐标系

# 绘制地图
m = Basemap(projection='lcc',    # 投影类型
            llcrnrlon=77, llcrnrlat=14,    # 左下角经纬的
            urcrnrlon=148, urcrnrlat=57,    # 右上角经纬度
            lat_1=33, lat_2=45, lon_0=100    # 
           )
m.drawcoastlines()    # 海岸线
m.drawcountries()    # 国界线

# 获取大陆各省的信息
m.readshapefile(shapefile='gadm36_CHN_shp/gadm36_CHN_1',
                name='states',
                drawbounds=True)   
plt.show()

地图:

 

 3、在各省形状上填充颜色

fig = plt.figure(figsize=(12, 8),    # 画布尺寸
                 facecolor='cornsilk'    # 画布背景色
                )
ax = plt.gca()   # 获取当前绘图区的坐标系

# 绘制地图
m = Basemap(projection='lcc',    # 投影类型
            llcrnrlon=77, llcrnrlat=14,    # 左下角经纬的
            urcrnrlon=148, urcrnrlat=57,    # 右上角经纬度
            lat_1=33, lat_2=45, lon_0=100    # 
           )
m.drawcoastlines()    # 海岸线
m.drawcountries()    # 国界线

# 获取大陆各省的信息
m.readshapefile(shapefile='gadm36_CHN_shp/gadm36_CHN_1',
                name='states',
                drawbounds=True)

# 在大陆各省形状上填充颜色
for shp in m.states:
    poly = Polygon(xy=shp,
                   facecolor='olivedrab',    # 填充草绿色
                  )
    ax.add_patch(poly)    # 在坐标系中添加省域多边形

    
plt.show()

地图:

 

 4、为台湾省填充颜色

fig = plt.figure(figsize=(12, 8),    # 画布尺寸
                 facecolor='cornsilk'    # 画布背景色
                )
ax = plt.gca()   # 获取当前绘图区的坐标系

# 绘制地图
m = Basemap(projection='lcc',    # 投影类型
            llcrnrlon=77, llcrnrlat=14,    # 左下角经纬的
            urcrnrlon=148, urcrnrlat=57,    # 右上角经纬度
            lat_1=33, lat_2=45, lon_0=100    # 
           )
m.drawcoastlines()    # 海岸线
m.drawcountries()    # 国界线

# 获取大陆各省的信息
m.readshapefile(shapefile='gadm36_CHN_shp/gadm36_CHN_1',
                name='states',
                drawbounds=True)
# 获取台湾省的 shp 信息
m.readshapefile('gadm36_TWN_shp/gadm36_TWN_0',
                'taiwan',
                drawbounds=True)
# 在大陆各省形状上填充颜色
for shp in m.states:
    poly = Polygon(xy=shp,
                   facecolor='olivedrab',    # 填充草绿色
                  )
    ax.add_patch(poly)    # 在坐标系中添加省域多边形

# 在台湾形状上填充颜色
for shp in m.taiwan:
    poly = Polygon(shp,
                   facecolor='olivedrab')
    ax.add_patch(poly)
    
plt.show()

地图:

 5、用红色填充北京市

fig = plt.figure(figsize=(12, 8),    # 画布尺寸
                 facecolor='cornsilk'    # 画布背景色
                )
ax = plt.gca()   # 获取当前绘图区的坐标系

# 绘制地图
m = Basemap(projection='lcc',    # 投影类型
            llcrnrlon=77, llcrnrlat=14,    # 左下角经纬的
            urcrnrlon=148, urcrnrlat=57,    # 右上角经纬度
            lat_1=33, lat_2=45, lon_0=100    # 
           )
m.drawcoastlines()    # 海岸线
m.drawcountries()    # 国界线

# 获取大陆各省的信息
m.readshapefile(shapefile='gadm36_CHN_shp/gadm36_CHN_1',
                name='states',
                drawbounds=True)
# 获取台湾省的 shp 信息
m.readshapefile('gadm36_TWN_shp/gadm36_TWN_0',
                'taiwan',
                drawbounds=True)

# 在大陆各省形状上填充颜色
for shp in m.states:
    poly = Polygon(xy=shp,
                   facecolor='olivedrab',    # 填充草绿色
                  )
    ax.add_patch(poly)    # 在坐标系中添加省域多边形

# 在台湾形状上填充颜色
for shp in m.taiwan:
    poly = Polygon(shp,
                   facecolor='olivedrab')
    ax.add_patch(poly)

# 用红色填充北京市
for info, shp in zip(m.states_info, m.states):
    proid = info['NAME_1']  # NAME_1 代表各省的名称
    if proid == 'Beijing':
        poly = Polygon(shp,
                       facecolor='r',
                       lw=3)
        ax.add_patch(poly)
    
plt.show()

地图:

 

 

按:

绘制指定国家行政区的地图需要下载 shapfile 文件, 可参看

https://baijiahao.baidu.com/s?id=1593631060848375411&wfr=spider&for=pc

https://blog.csdn.net/maoye/article/details/90157850

 

 

posted @ 2020-06-09 22:32  赏尔  阅读(8852)  评论(0编辑  收藏  举报