必要时转载请标明出处
安装basemap库
https://www.lfd.uci.edu/~gohlke/pythonlibs/#basemap
代码部分
第一步
读取csv资源文件,并使用basemap创建地图
# csdn@guxiaojiujiu
# https://blog.youkuaiyun.com/hgxiaojiujiu/article/details/123338186
import pandas as pd
from mpl_toolkits.basemap import Basemap
from matplotlib.colors import LinearSegmentedColormap
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
from matplotlib.colors import rgb2hex
path_pre = "C:\\Users\\Administrator\\Desktop\\Project\\PytorchDemo\\TempDemo"
path = path_pre+'\\data.csv'
df = pd.read_csv(path, encoding='utf-8')
pivoted = pd.pivot_table(df, index='省份', values='robot_stock_base渗透度', aggfunc=sum) # 汇总为数据透视表,这里每日新增确诊的sum即为当地累计确诊
data = pivoted['robot_stock_base渗透度']
m = Basemap(llcrnrlon=77, llcrnrlat=14, urcrnrlon=140, urcrnrlat=51, projection='lcc', lat_1=33, lat_2=45,
lon_0=100)
m.readshapefile(path_pre+"\\shapefiles\\china", 'china', drawbounds=True)
第二步
设置渐变色并根据数据计算颜色深浅
cmap1 = LinearSegmentedColormap.from_list('mycmap', ['green', 'white']) # 定义负值colormap,绿白渐变
vmax1 = 0
vmin1 = min(data)
norm1 = mpl.colors.Normalize(vmin=vmin1, vmax=vmax1) # 正态分布
cmap2 = LinearSegmentedColormap.from_list('mycmap', ['white', 'red']) # 定义正值colormap,白红渐变
vmax2 = max(data) # 累计确诊书阈值,高于1500都为最深红色,如不设置阈值这里应为max(data)
vmin2 = 0
norm2 = mpl.colors.Normalize(vmin=vmin2, vmax=vmax2)
province_name_set = set(province_name_list)
colors = {}
for index, value in data.iteritems():
if value < 0:
colors[index] = cmap1(np.sqrt((value - vmin1) / (vmax1 - vmin1)))[:3]
else:
colors[index] = cmap2(np.sqrt((value - vmin2) / (vmax2 - vmin2)))[:3]
第三步
提取数据中的省份去重,根据比重来设置显示的颜色的深浅
province_name_list = []
for province in m.china_info:
province_name = province["FCNAME"]
province_name_list.append(province_name)
ax = plt.gca()
for idx, seg in enumerate(m.china):
if province_name_list[idx] in colors:
color = rgb2hex(colors[province_name_list[idx]]) # 颜色格式由RGB转为16位HEX
poly = Polygon(seg, facecolor=color, edgecolor=color)
else :
poly = Polygon(seg, facecolor="white", edgecolor="black")
ax.add_patch(poly) # 将颜色添加到画布上
plt.show()
资源下载
csv资源:https://download.youkuaiyun.com/download/hgxiaojiujiu/83817505
绘制地图资源:https://download.youkuaiyun.com/download/hgxiaojiujiu/83817198
以上资源也可以到github上自行下载
注:以上的地图绘制是针对整个省份而言的,如果需要针对地级市而言,请下载以下代码
https://download.youkuaiyun.com/download/hgxiaojiujiu/83819293