参考地址:https://mp.weixin.qq.com/s/Mni6ZLGC5jlUzMVpglv6JA               https://www.cnblogs.com/ameile/p/6694982.html

1.首先建立一个字典用来存储每个省份的疫情状况,使用不同的颜色标记来区分

2.readshapefile为读取下载好的地图文件,源码中的原话为:

For example, if name='counties', self.counties will be a list of x,y vertices for each shape in map projection coordinates and self.counties_info will be a list of dictionaries with shape attributes. 程序中给入的值为prov,所以map1.prov_info为地图信息,map1.prov为多边形的坐标

from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
from matplotlib.patches import PathPatch
import numpy as np


if __name__ == '__main__':
    info_dic = {}
    provinces = ['湖北','广东','浙江','河南','湖南','安徽','江西','江苏','重庆','山东','四川','北京','黑龙江','上海','福建','河北','陕西','广西','云南','海南','山西','贵州','辽宁','天津','甘肃','吉林','内蒙古','新疆','宁夏','香港','青海','台湾','澳门','西藏']
    nums =[29631,1151,1092,1073,879,830,771,492,468,466,405,337,331,299,261,218,213,210,141,136,119,109,107,94,83,80,58,49,49,36,18,18,10,1]
    colors = ['darkred','firebrick','indianred','lightcoral','lightsalmon']
    for i in range(len(provinces)):
        info_dic[provinces[i]] = str(nums[i])

    for name in info_dic.keys():
        # print(name)
        if int(info_dic[name])>=10000:
            info_dic[name]= 'darkred'
        elif 1000<int(info_dic[name])<9999:
            info_dic[name]= 'firebrick'
        elif 100<int(info_dic[name])<999:
            info_dic[name]= 'indianred'
        elif 10<int(info_dic[name])<99:
            info_dic[name]='lightcoral'
        else:
            info_dic[name]='lightsalmon'



    map1 =  Basemap(projection='lcc', width=7000000,height=5000000,
                       lat_0=35, lon_0=105)
    plt.figure(figsize=(12,9))
    map1.drawmapboundary(fill_color='aqua')
    map1.fillcontinents(color='#ddaa66',lake_color='aqua')
    map1.drawcoastlines()
    map1.readshapefile(r'map\gadm36_CHN_1', 'prov')
    #print(map1.prov_info)
    #print(map1.prov)  #列表
    #map1.readshapefile(r'f:\data\gadm36_TWN_shp\gadm36_TWN_0', 'taiwan') # 台湾地图要单独添加

    #print(list(zip(map1.prov_info, map1.prov)))

    ax = plt.gca()  #  获取当前子图
    for name in provinces:
        patch = []
        if name != '台湾':
            for info, shape in zip(map1.prov_info, map1.prov):  # 将每个省的地图信息与坐标合并成元组
                if name in info['NL_NAME_1']:  # map1.prov_info 中'NL_NAME_1': '遼寧|辽宁',
                    patch.append( Polygon(np.array(shape), closed=True))  #  将多边形顶点连接绘制多边形
            ax.add_collection(PatchCollection(patch, facecolor=info_dic[name],edgecolor='k', linewidths=1., zorder=2))

        # else:
        #     for info, shape in zip(map1.taiwan_info, map1.taiwan):
        #         if info['NAME_0'] == "Taiwan":
        #             patch.append( Polygon(np.array(shape), closed=True) )
        #     ax.add_collection(PatchCollection(patch, facecolor=info_dic['台湾']['color'], edgecolor='k', linewidths=1., zorder=2))



    plt.show()

Logo

这里是“一人公司”的成长家园。我们提供从产品曝光、技术变现到法律财税的全栈内容,并连接云服务、办公空间等稀缺资源,助你专注创造,无忧运营。

更多推荐