python使用basemap库绘制地图

必要时转载请标明出处

安装basemap库

https://www.lfd.uci.edu/~gohlke/pythonlibs/#basemap

代码部分

第一步
读取csv资源文件,并使用basemap创建地图

# csdn@guxiaojiujiu
# https://blog.csdn.net/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.csdn.net/download/hgxiaojiujiu/83817505
绘制地图资源:https://download.csdn.net/download/hgxiaojiujiu/83817198
以上资源也可以到github上自行下载

注:以上的地图绘制是针对整个省份而言的,如果需要针对地级市而言,请下载以下代码
https://download.csdn.net/download/hgxiaojiujiu/83819293

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值