python如何使用cartopy库来创建一个地图底图并绘制采样点位图

本文介绍了如何利用Python的cartopy库加载shp文件,绘制徐州市地图,添加经纬度网格线,以及如何通过散点图展示采样点的PM10数值,使用颜色映射来表示点的大小。
摘要由CSDN通过智能技术生成

目录

cartopy库来创建地图底图

shp文件

地图绘制代码

引入所需要的库

 路径设置

 文件读入与地图绘制

经纬度添加

 绘制采样散点图

数据准备(杜撰)

绘制散点图 

颜色映射大小 

徐州市采样点位图 


cartopy库来创建地图底图

shp文件

  • 下载好绘制地区的shp文件数据

地图绘制代码

引入所需要的库

import matplotlib as mpl
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.io.shapereader as shpreader
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER

 路径设置

  • extents设置合适和经纬度范围
  • filepath为shp文件路径
extents = [116, 119, 33, 36]
filepath = 'D:\\地图shp\\徐州市\徐州市.shp'

 文件读入与地图绘制

ax.add_geometries中:

  • lw可设置线宽;
  • fc设置地图面的颜色
crs = ccrs.PlateCarree()
fig = plt.figure(figsize=[8,10])
ax = fig.add_subplot(111, projection=crs)
ax.set_extent(extents, crs)
reader = shpreader.Reader(filepath)
geoms = reader.geometries()
ax.add_geometries(geoms, crs, lw=1, fc='none')
plt.show()

代码执行结果

经纬度添加

ax.gridlines()添加经纬度

  • draw_labels设置标签是否显示
  • 通过ax.gridlines设置经纬度,0.5为经纬度间隔
  • linestyle设置网格线类型,linestyle='--'为虚线
  • linewidth设置网格线宽度,linewidth=0即不添加网格线
gl = ax.gridlines(draw_labels=True,  
                   xlocs=np.arange(extents[0], extents[1], 0.5),  # 经度位置,包含边界值  
                   ylocs=np.arange(extents[2], extents[3], 0.5),
                   xformatter=LONGITUDE_FORMATTER,  
                   yformatter=LATITUDE_FORMATTER,
                    linestyle='--',
                   linewidth=1)  

代码执行结果 

 绘制采样散点图

数据准备(杜撰)

  • lon,lat为点位的经纬度
  • values为每个点位所代表的数据大小
lon=[117.14509,118,117.8,116.8,117.5,117.8]
lat=[34.214571,34.5,34,34.6,34.3,34.3]
values=[75,60,50,30,20,35]

绘制散点图 

  •  在地图上绘制所需要的散点图和坐标系中类似用ax.scatter即可,横纵坐标即为点位的经纬度
  •  transform=ccrs.PlateCarree()参数来确保散点的坐标被正确转换到地图的坐标参考系统
ax.scatter(lon, lat, transform=ccrs.PlateCarree(),s =150,alpha=0.5,edgecolors='black') 

 代码执行结果

 

颜色映射大小 

此外我们可以用颜色来映射值values的大小 

ax.scatter()中

  • c参数用于设置每个点的颜色,点的颜色根据values数组中的值进行映射。
  • s设置点的大小,这里用values的倍数表示点的大小
  • cmap参数指定颜色映射,颜色选择可见下面文章,其中'RdYlGn_r' 是 'RdYlGn' 颜色映射的反转版本

plt.colorbar()用于创建一个色条

  • location设置色调位置
  • pad设置色条距离子图的间距
  • shrink用于缩小色条的大小
  • aspect设置色条的宽度与其高度的比例

cbar.set_label()设置色条标题

scatter=ax.scatter(lon, lat, 
                    transform=ccrs.PlateCarree(),
                    s =120,
                    alpha=0.7,
                    edgecolors='black',
                    c=values,
                    cmap='RdYlGn_r') 
cbar = plt.colorbar(scatter, ax=ax, location='right',pad=0.1,
                     shrink=0.5, aspect=15) 
cbar.set_label('PM10') 
ax.set_title('徐州市监测点位PM10分布', fontsize=12)

徐州市采样点位图 

  • 49
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值