python cartopy手动导入地图数据绘制底图/python地图上绘制散点图:Downloading:warnings/散点图添加图里标签

news2024/11/27 10:19:20

……开学回所,打开电脑spyder一看一脸懵逼,简直不敢相信这些都是我自己用过的代码,想把以前的自己喊过来科研了(×)
废话少说,最近写小综述论文,需要绘制一个地图底图+散点图,点大小对应值大小的,来总结目前的观测结果,图大概如下:

在这里插入图片描述Locations and concentrations of BC snow observations collected from Arctic campaigns between 2005–2010. Reprinted from Dou and Xio (2016).

其实就是地图底图+散点图的绘制,思路很明确:先绘制底图+地理要素,再在底图上画散点图,那么作为开学编程复建,先一步步来。

底图绘制

主要是想画一下北极的底图,这个简单,无脑画就是了:

import matplotlib.path as mpath

import cmapsimport matplotlib.ticker as mticker

import matplotlib.pyplot as plt###引入库包
import matplotlib as mpl
import cartopy.crs as ccrs
import cartopy.feature as cfeature
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
proj =ccrs.NorthPolarStereo(central_longitude=0)#设置地图投影
#在圆柱投影中proj = ccrs.PlateCarree(central_longitude=xx)
leftlon, rightlon, lowerlat, upperlat = (-180,180,60,90)#经纬度范围

img_extent = [leftlon, rightlon, lowerlat, upperlat]
fig1 = plt.figure(figsize=(12,10))#设置画布大小
f1_ax1 = fig1.add_axes([0.2, 0.3, 0.5, 0.5],projection = ccrs.NorthPolarStereo(central_longitude=0))#绘制地图位置
#注意此处添加了projection = ccrs.NorthPolarStereo(),指明该axes为北半球极地投影
#f1_ax1.gridlines(crs=ccrs.PlateCarree(), draw_labels=True,
 #                 linewidth=1, color='grey',linestyle='--')
f1_ax1.set_extent(img_extent, ccrs.PlateCarree())
f1_ax1.add_feature(cfeature.COASTLINE)
f1_ax1.add_feature(cfeature.OCEAN)
f1_ax1.add_feature(cfeature.LAND)
g1=f1_ax1.gridlines(crs=ccrs.PlateCarree(), draw_labels=True, linewidth=1, color='gray',linestyle='--')
g1.xlocator = mticker.FixedLocator(np.linspace(-180,180,13))
g1.ylocator = mticker.FixedLocator(np.linspace(60, 90,4))
#plt.show()
theta = np.linspace(0, 2*np.pi, 100)
center, radius = [0.5, 0.5], 0.44
verts = np.vstack([np.sin(theta), np.cos(theta)]).T
circle = mpath.Path(verts * radius + center)
f1_ax1.set_boundary(circle, transform=f1_ax1.transAxes)
plt.show()

结果出现了这个报错:

D:\Anaconda\lib\site-packages\cartopy\io\__init__.py:241: DownloadWarning: Downloading: https://naturalearth.s3.amazonaws.com/50m_physical/ne_50m_coastline.zip
  warnings.warn(f'Downloading: {url}', DownloadWarning)

查了下,这是由于cartopy无法下载地图数据导致,大部分原因都是因为网络问题(墙),既然如此,我们就手动下载吧。
先查看一下我们cartopy读取数据的路径:

import cartopy
cartopy.config

返回:

{'pre_existing_data_dir': '',
 'data_dir': 'C:\\Users\\zzl\\.local\\share\\cartopy',
 'cache_dir': 'C:\\Users\\zzl\\AppData\\Local\\Temp\\cartopy_cache_dir',
 'repo_data_dir': 'D:\\Anaconda\\lib\\site-packages\\cartopy\\data',
 'downloaders': {('shapefiles',
   'natural_earth'): <cartopy.io.shapereader.NEShpDownloader at 0x20ed4d18ca0>,
  ('shapefiles',
   'gshhs'): <cartopy.io.shapereader.GSHHSShpDownloader at 0x20ed4d26520>}}

其中data_dir便是cartopy读取数据的文件,我们进入这个网址:Natural Earth Download,下载对应的数据,我这里下的是physics的50m和110m.
在这里插入图片描述
将下载的数据解压到data_dir路径里,如下:
在这里插入图片描述
再运行代码

from cartopy.io import shapereader
# 获取文件路径信息
filename = shapereader.natural_earth()
print(filename)

使其读取natural_earth数据即可。
画好后如下:
在这里插入图片描述

绘制散点

一般的打点的我们使用’plot‘加上经纬度就好了,但对于有数据的点而言,我们为了更加直观,需要将点大小与数据对应,这里我们使用plt.scatter。
需要注意的是;由于绘图时我们是根据经纬度坐标来打点,而我们的地图本身是带有投影的,因此,直接使用经纬度坐标并不可行,需要将其转为地理坐标:
代码如下:

stlat=[69.4,78.874,73.428,72.256]
stlon=[18.6,11.923,81.481,103.038]
bc=[24,11,15,60]
f1_ax1.scatter(stlon,stlat,bc,c='r',alpha=0.5,transform=ccrs.Geodetic())#转为地理坐标
plt.show()

绘图如下:
在这里插入图片描述

图例添加

添加图例是个很麻烦的问题,因为我们是想要根据其大小绘制,此时我们只能根据条件,一个个的绘制。

g11=plt.scatter(11.923,78.874,s=5,c='r',marker='o',linewidths=2,transform=ccrs.Geodetic())
g2=plt.scatter(18.6,69.4,s=20,c='r',marker='o',linewidths=2,transform=ccrs.Geodetic())
g3=g1=plt.scatter(103.058,72.256,s=50,c='r',marker='o',linewidths=2,transform=ccrs.Geodetic())
plt.legend((g11,g2,g3),('10-20','20-30','>50'),loc='best',scatterpoints=1,markerscale=1)
plt.show(

绘图如下:
在这里插入图片描述
以上,完成,编程复建结束,继续睡觉(

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/345450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Cortex-M0存储器系统

目录1.概述2.存储器映射3.程序存储器、Boot Loader和存储器重映射4.数据存储器5.支持小端和大端数据类型数据对齐访问非法地址多寄存器加载和存储指令的使用6.存储器属性1.概述 Cortex-M0处理器具有32位系统总线接口&#xff0c;以及32位地址线&#xff08;4GB的地址空间&…

TongWeb8数据源相关问题

问题一&#xff1a;数据源连接不足当TongWeb数据源连接用完时&#xff0c;除了监控中看到连接占用高以外&#xff0c;日志中会有如下提示信息。2023-02-14 10:24:43 [WARN] - com.tongweb.web.jdbc.pool.PoolExhaustedException: [TW-0.0.0.0-8088-3] Timeout: Pool empty. Una…

Hadoop高可用搭建(一)

目录 创建多台虚拟机 修改计算机名称 快速生效 修改网络信息 重启网络服务 关闭和禁用每台机的防火墙 同步时间 安装ntpdate 定时更新时间 启动定时任务 设置集群中每台机器的/etc/hosts 把hosts拷贝发送到每一台虚拟机 配置免密登陆 将本机的公钥拷贝到要免密登…

二三层网络设备封装与解封装原理

1、寻址转发&#xff08;寻址指的是寻找IP地址&#xff09; 路由表放在一个公共的地方&#xff0c;比如主控板上&#xff0c;由主控板 的CPU运行路由协议&#xff0c;计算路由&#xff0c;生成和维护路由表。 转发表与路由表&#xff1a; 转发表是根据路由表生成的。路由表中…

17- 梯度提升回归树GBDT (集成算法) (算法)

单一KNN算法: # knn近邻算法: K-近邻算法&#xff08;KNN) from sklearn.neighbors import KNeighborsClassifier knn KNeighborsClassifier() knn.fit(X_train,y_train)KNN集成算法: from sklearn.neighbors import KNeighborsClassifier from sklearn.ensemble i…

在浏览器输入URL后发生了什么?

在浏览器输入URL并获取响应的过程&#xff0c;其实就是浏览器和该url对应的服务器的网络通信过程。从封装的角度来讲&#xff0c;浏览器和web服务器执行以下动作&#xff1a;&#xff08;简单流程&#xff09;1、浏览器先分析超链接中的URL:分析域名是否规范2、浏览器向DNS请求…

opencv基础知识和绘图图形

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

拥抱ChatGPT,开启结对咨询模式!

ChatGPT刮起了一阵旋风&#xff0c;ChatGPT到底能做什么&#xff1f;做到什么程度&#xff1f;真的会让咨询顾问失业吗&#xff1f;带着这样的疑问&#xff0c;我费尽周折&#xff0c;注册了ChatGPT账号。我先从一个大众化的话题开启了与ChatGPT的对话&#xff1a;如何提高软件…

分享111个HTML电子商务模板,总有一款适合您

分享111个HTML电子商务模板&#xff0c;总有一款适合您 111个HTML电子商务模板下载链接&#xff1a;https://pan.baidu.com/s/1e8Wp1Rl9RaFrcW0bilIatg?pwdc97h 提取码&#xff1a;c97h Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 HTML5家居家具电子商务网…

用到的C++的相关知识-----未完待续

文章目录前言一、vector函数的使用1.1 构造向量二、常用函数2.1 矩阵输出函数2.2 向量输出函数2.3 矩阵的使用2.4三、new的用法3.1 内存的四种分区3.2 new的作用3.33.4四、4.14.24.34.4总结前言 只是为方便学习&#xff0c;不做其他用途 一、vector函数的使用 有关的文章 C v…

十六、基于FPGA的CRC校验设计实现

1&#xff0c;CRC校验循环冗余校验&#xff08;Cyclic Redundancy Check&#xff0c; CRC&#xff09;是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术&#xff0c;主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的…

【情人节用Compose给女神写个爱心动画APP】

情人节用Compose给女神写个爱心动画APP前言涉及知识点实现思路实现过程绘制爱心创建动画效果Preview预览效果完整源码彩蛋前言 前一阵子看电视里的学霸用代码写了个炫酷的爱心&#xff0c;网上有很多js和python的源码&#xff0c;复制粘贴就能拥有&#xff0c;但是Android的好…

重写-linux内存管理-伙伴分配器(一)

文章目录一、伙伴系统的结构二、初始化三、分配内存3.1 prepare_alloc_pages3.2 get_page_from_freelist3.2.1 zone_watermark_fast3.2.2 zone_watermark_ok3.2.3 rmqueue3.2.3.1 rmqueue_pcplist3.2.3.2 __rmqueue3.2.3.2.1 __rmqueue_smallest3.2.3.2.2 __rmqueue_fallback3.…

怎么代理微信小程序创业?

随着微信的兴起&#xff0c;小程序已经成为了人们生活中不可或缺的一部分。如果你想要创业的话&#xff0c;那么代理微信小程序是一个不错的选择。本文将为大家介绍怎么代理微信小程序创业。 一、什么是微信小程序 微信小程序是一款专为移动设备使用者而设计的应用。它通过扫…

javaEE 初阶 — 滑动窗口

文章目录滑动窗口1 滑动窗口下如何处理丢包TCP 工作机制&#xff1a;确认应答机制 超时重传机制 连接管理机制 滑动窗口 确认应答机制、超时重传机制、连接管理机制 都是给 TCP 的可靠性提供支持的。 虽然事变的比较可靠了&#xff0c;但是是有牺牲的&#xff0c;那就是传输…

黑马SpringCloud知识点和面试题

目录 一、微服务 1.1、微服务技术栈 1.2、微服务的介绍&#xff1a; 1.3、微服务技术对比 1.4、认识微服务-springcloud 1.4.1、springcloud和springboot的兼容性&#xff08;左边springcloud右边springboot版本&#xff09; 1.5、服务拆分&#xff0c;服务远程调用&…

数学建模美赛【LaTeX】公式、表格、图片

数学建模美赛【LaTeX】公式、表格、图片 1 宏包 \package{ } 就是在调用宏包&#xff0c;对计算机实在外行的同学姑且可以理解为工具箱。 每一个宏包里都定义了一些专门的命令&#xff0c;通过这些命令可以实现对于一类对象&#xff08;如数学公式等&#xff09;的统一排版&a…

opencv的TrackBar控件

大家好&#xff0c;我是csdn的博主&#xff1a;lqj_本人 这是我的个人博客主页&#xff1a; lqj_本人的博客_CSDN博客-微信小程序,前端,python领域博主lqj_本人擅长微信小程序,前端,python,等方面的知识https://blog.csdn.net/lbcyllqj?spm1011.2415.3001.5343哔哩哔哩欢迎关注…

HTML预格式化文本pre标签

文章目录参考white-spaceword-breakfont-family参考 https://blog.csdn.net/weixin_44368963/article/details/120054949 https://www.zhangxinxu.com/wordpress/2017/03/css-font-family-chinese-english/ pre 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留…

UG二次开发装配篇 添加/拖动/删除组件方法的实现

我们在UG装配的过程中&#xff0c;经常会遇到需要调整组件目录位置&#xff0c;在软件设计过程中可以通过在目录树里面拖动组件来完成。 那么&#xff0c;如果要用程序实现组件的移动/拖动&#xff0c;我们要怎么做呢&#xff1f; 本节就完成了添加/拖动/删除组件方法的实现&…