当前位置: 首页 > news >正文

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

……开学回所,打开电脑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 mpathimport cmapsimport matplotlib.ticker as mtickerimport 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.zipwarnings.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(

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

相关文章:

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

……开学回所&#xff0c;打开电脑spyder一看一脸懵逼&#xff0c;简直不敢相信这些都是我自己用过的代码&#xff0c;想把以前的自己喊过来科研了&#xff08;&#xff09; 废话少说&#xff0c;最近写小综述论文&#xff0c;需要绘制一个地图底图&#xff0b;散点图&#xff…...

JavaScript中常用的数组方法

在日常开发中&#xff0c;我们会接触到js中数组的一些方法&#xff0c;这些方法对我们来说&#xff0c;可以很便利的达到我们想要的结果&#xff0c;但是因为方法比较多&#xff0c;有些方法也不常用&#xff0c;可能会过一段时间就会忘记&#xff0c;那么在这里我整理了一些数…...

磁疗为什么“没效果”?原来真相是这样!

很多人磁疗之后&#xff0c; 总爱迫不及待问一个问题&#xff1a; “这个多长时间见效啊&#xff1f;” …… 还有些人几天没有效果&#xff0c; 就果断下结论&#xff1a; “这东西没用&#xff01;” …… 有不少人错误地把磁疗等同于“药品”一样看待&#xff0c;总觉得…...

【直击招聘C++】5.1函数模板

5.1函数模板一、要点归纳1.定义函数模板2.实例化函数模板3.重载模板函数4.函数调用的匹配顺序一、要点归纳 1.定义函数模板 定义函数模板的一般格式如下&#xff1a; template<类型形参表> 返回类型 函数名&#xff08;形参表&#xff09; {函数体&#xff1b; }例如以…...

谈谈Java多线程离不开的AQS

如果你想深入研究Java并发的话&#xff0c;那么AQS一定是绕不开的一块知识点&#xff0c;Java并发包很多的同步工具类底层都是基于AQS来实现的&#xff0c;比如我们工作中经常用的Lock工具ReentrantLock、栅栏CountDownLatch、信号量Semaphore等&#xff0c;而且关于AQS的知识点…...

国际化语言,多语言三种方式

可以用透传的方式&#xff0c;自己写local的json文件&#xff0c;不需要配置什么&#xff0c;直接传&#xff0c;自己写方法i18n nextjsi18n umi4一、透传的方式 export const AppContext React.createContext<any>({})app.tsx 用context包裹import type { AppProps } f…...

C++——哈希3|位图

目录 常见哈希函数 位图 位图扩展题 位图的应用 常见哈希函数 1. 直接定址法--(常用) 这种方法不存在哈希冲突 取关键字的某个线性函数为散列地址&#xff1a;Hash&#xff08;Key&#xff09; A*Key B 优点&#xff1a;简单、均匀 缺点&#xff1a;需要事先知道关键字的…...

75 error

全部 答对 答错 选择题 3. 某公司非常倚重预测型方法交付项目&#xff0c;而其招聘的新项目经理却习惯于运用混合型方法。项目范围包含很多不清晰的需求。项目经理应该如何规划项目的交付&#xff1f; A company that is heavily focused on delivering projects using predi…...

ESP-C3入门8. 连接WiFi并打印信息

ESP-C3入门8. 连接WiFi并打印信息一、ESP32 连接WiFi的基本操作流程1. 初始化nvs存储2. 配置WiFi工作模式3. 设置WiFi登陆信息4. 启动WiFi5. 开启连接6. 判断是否成功二、事件处理函数1. 定义事件处理函数2. 创建事件组3. 在事件处理函数中设置事件组位4. 在其他任务中等待事件…...

使用python将EXCEL表格中数据转存到数据库

使用Python将excel表格中数据转存到数据库 1. 思路&#xff1a; 1&#xff09; 使用python读取excel表格中数据 2&#xff09;根据数据生成sql语句 3&#xff09;批量运行sql语句 2. 代码&#xff1a; import pandas as pddef readExcel(path, excel_file):return pd.read_e…...

【C++】类和对象(三)

目录 一、构造函数补充 1、初始化列表 1.1、初始化列表概念 1.2、初始化列表性质 2、explicit关键字 二、static成员 1、概念及使用 2、性质总结 三、友元 1、友元函数 2、友元类 四、内部类 五、拷贝对象时的一些编译器优化 一、构造函数补充 在《类和对象&#x…...

vTESTstudio - VT System CAPL Functions - General/Trigger Function

前面文章中我们已经介绍了常用的几种板卡的基本信息&#xff0c;那这些板卡该如何去通过软件调用呢&#xff1f;带着这个问题我们开始新的一块内容 - VT系统相关的自动化控制函数介绍&#xff0c;我会按照不同的板卡来分类&#xff0c;对其可控制的函数进行介绍&#xff0c;方便…...

IDEA 快捷键

ctrlD &#xff1a;复制当前行到下一行 ctrlO : 重写当前类的方法 ctrlshiftu : 大小写转化 Alt 上/下 &#xff1a;跳到上一个、下一个函数 Alt 左/右 : 回到上一个、下一个文件 Alt 回车 &#xff1a; 代码修正 Alt Insert &#xff1a; 插入代码 Ctrl Alt L &#xf…...

2023新华为OD机试题 - 入栈出栈(JavaScript) | 刷完必过

入栈出栈 题目 向一个空栈中依次存入正整数 假设入栈元素N(1 <= N <= 2^31-1) 按顺序依次为Nx ... N4、N3、N2、N1, 当元素入栈时,如果N1=N2+...Ny (y的范围[2,x],1 <= x <= 1000) 则N1到Ny全部元素出栈,重新入栈新元素M(M=2*N1) 如依次向栈存储6、1、2、3,当存…...

微信公众号扫码授权登录思路

引言 上学期研究了一下微信登录相关内容&#xff0c;也写了两三篇笔记&#xff0c;但是最后实际登录流程没有写&#xff0c;主要因为感觉功能完成有所欠缺&#xff0c;一直也没有好的思路&#xff1b;这两天我又看了看官方文档&#xff0c;重新构思了一下微信公众号登录相关的…...

数据结构与算法基础-学习-10-线性表之顺序栈的清理、销毁、压栈、弹栈

一、函数实现顺序栈的其他函数实现&#xff0c;请看之前的博客链接《数据结构与算法基础-学习-09-线性表之栈的理解、初始化顺序栈、判断顺序栈空、获取顺序栈长度的实现》。1、ClearSqStack&#xff08;1&#xff09;用途清理栈的空间。只需要栈顶指针和栈底指针相等&#xff…...

Hazel游戏引擎(005)

本人菜鸟&#xff0c;文中若有代码、术语等错误&#xff0c;欢迎指正 我写的项目地址&#xff1a;https://github.com/liujianjie/GameEngineLightWeight&#xff08;中文的注释适合中国人的你&#xff09; 文章目录前言关键操作代码文件关键代码代码流程代码文件关键代码exter…...

牛客网Python篇数据分析习题(四)

1.现有一个Nowcoder.csv文件&#xff0c;它记录了牛客网的部分用户数据&#xff0c;包含如下字段&#xff08;字段与字段之间以逗号间隔&#xff09;&#xff1a; Nowcoder_ID&#xff1a;用户ID Level&#xff1a;等级 Achievement_value&#xff1a;成就值 Num_of_exercise&a…...

盲盒如何创业?

所谓的“盲盒”&#xff0c;受众群体大部分是那些爱碰运气的人&#xff0c;顾客买的是那种在打开盲盒时一刹那的惊喜感和神秘感&#xff0c;在打开盲盒之前&#xff0c;谁也不知道自己会得到什么&#xff0c;这也是为什么消费者更愿意购买的原因。网上的盲盒&#xff0c;主要是…...

第1集丨Java中面向对象相关概念汇总

目录一、基本概念1.1 类1.2 属性1.3 方法1.4 静态1.5 包1.6 import二、高级概念2.1 构造方法2.2 继承2.3 super & this2.4 多态2.5 方法重载2.6 方法重写2.7 访问权限2.8 内部类2.9 final2.10 抽象2.11 接口2.12 匿名类面向对象的编程思想力图使计算机语言中对事物的描述与…...

【OpenClaw 全面解析:从零到精通】第 025 篇:OpenClaw v2026.3.22+v2026.3.23 安全与架构全面升级:从版本迭代看 AI Agent 工程化实践

系列说明&#xff1a;本系列全面介绍 OpenClaw 开源 AI 智能体框架&#xff0c;从历史背景到核心原理&#xff0c;从安装部署到应用生态。本文为系列第 025 篇&#xff0c;结合 2026 年 3 月 22-24 日最新发布的双版本合并更新&#xff0c;系统解析 OpenClaw 从功能驱动到安全驱…...

大三大学生挖洞收入十万背后:网安圈的“天才少年”,普通人能复制吗?

大三学生挖洞收入十万背后&#xff1a;网安圈的 “天才少年” &#xff0c;普通人能复制吗&#xff1f; SRC首期学员战绩疯传&#xff1a;大四小白45天回本6K&#xff1f;大三在读2个月挖洞收获六位数&#xff1f; 当朋友圈被"零基础挖洞暴富"的捷报疯狂刷屏时&…...

在曹妃甸哪里可以吃到当天现捕上来的野生海鲜?

在曹妃甸&#xff0c;想要吃到当天现捕上来的野生海鲜&#xff0c;高尚堡老刘海鲜绝对是个绝佳的选择。2006 年&#xff0c;一群世代靠海吃海的渔民&#xff0c;在渤海湾码头开起了这家“老刘海鲜饭店”。起初他们只是想把自家渔船捕捞的野生海鲜&#xff0c;用最朴素的做法端给…...

家里装了 OpenClaw,在公司也能随时管理——Shield CLI 远程访问方案

家里装了 OpenClaw&#xff0c;在公司也能随时管理 OpenClaw 火到不用介绍了——GitHub 25 万 Star&#xff0c;一个能真正帮你干活的 AI Agent。很多人装在家里的 Windows 电脑上&#xff0c;配好了 API Key 和各种插件&#xff0c;用着很爽。但一到公司或者出门在外&#xff…...

Anaconda 被误删后抢救手册:零重装、10 分钟极速恢复

引言 作为 Python 开发者、数据分析师、AI 学习者的「必备工具」&#xff0c;Anaconda 凭借便捷的环境管理、海量预安装包&#xff0c;成为入门与进阶的首选。但很多人曾因误操作 —— 比如清理 C 盘时删掉anaconda3文件夹、卸载时选错路径、甚至误删系统环境变量 —— 导致co…...

5步构建智能医疗预约系统:91160-cli全流程实战指南

5步构建智能医疗预约系统&#xff1a;91160-cli全流程实战指南 【免费下载链接】91160-cli 健康160全自动挂号脚本 项目地址: https://gitcode.com/gh_mirrors/91/91160-cli 医疗资源紧张导致的挂号难题&#xff0c;让无数患者在凌晨守候却依然一号难求。如何突破人工抢…...

蛋白质设计实战:基于RFdiffusion的Motif Scaffolding功能位点定制化设计

1. 认识RFdiffusion与Motif Scaffolding 第一次接触蛋白质设计时&#xff0c;我被这个领域的复杂性震撼到了。20种氨基酸就像乐高积木&#xff0c;但它们的组合方式比宇宙中的星辰还要多。而RFdiffusion就像是一把神奇的钥匙&#xff0c;帮我打开了蛋白质设计的大门。 RFdiffus…...

Fillinger:设计自动化时代的效率提升工具

Fillinger&#xff1a;设计自动化时代的效率提升工具 【免费下载链接】illustrator-scripts Adobe Illustrator scripts 项目地址: https://gitcode.com/gh_mirrors/il/illustrator-scripts 核心价值&#xff1a;从机械操作到创意释放的设计革命 核心价值&#xff1a;让…...

MinerU效果展示:精准识别表格数据,财务报告一键解析

MinerU效果展示&#xff1a;精准识别表格数据&#xff0c;财务报告一键解析 1. 引言&#xff1a;当AI遇见财务报表 想象一下&#xff0c;你是一名财务分析师&#xff0c;面前堆着几十份上市公司最新发布的PDF财报。你需要从中快速提取近三年的营收、利润、现金流等关键数据&a…...

如何突破极域电子教室限制?3个高效学习工具推荐

如何突破极域电子教室限制&#xff1f;3个高效学习工具推荐 【免费下载链接】JiYuTrainer 极域电子教室防控制软件, StudenMain.exe 破解 项目地址: https://gitcode.com/gh_mirrors/ji/JiYuTrainer 在数字化教学环境中&#xff0c;极域电子教室作为常见的教学管理软件&…...