【python海洋专题二十四】南海年平均海流图

news2025/1/12 6:00:32

【python海洋专题二十四】南海年平均海流图

南海年平均海流图都是些基础图形,但又是重要的!

结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

关键语句

quiver([X, Y], U, V, [C], **kw)

参考资料

图片
Python气象数据处理与绘图(11):矢量箭头图(风场,通量场) - 简书 (jianshu.com)

往期推荐

  1. **[【python海洋专题一】查看数据nc文件的属性并输出属性到txt文件

    【python海洋专题二】读取水深nc文件并水深地形图 【python海洋专题三】图像修饰之画布和坐标轴

    【Python海洋专题四】之水深地图图像修饰

    【Python海洋专题五】之水深地形图海岸填充

    【Python海洋专题六】之Cartopy画地形水深图

    【python海洋专题】测试数据

    【Python海洋专题七】Cartopy画地形水深图的陆地填充

    【python海洋专题八】Cartopy画地形水深图的contourf填充间隔数调整

    【python海洋专题九】Cartopy画地形等深线图

    【python海洋专题十】Cartopy画特定区域的地形等深线图

    【python海洋专题十一】colormap调色

    【python海洋专题十二】年平均的南海海表面温度图

    【python海洋专题十三】读取多个nc文件画温度季节变化图

    【python海洋专题十四】读取多个盐度nc数据画盐度季节变化图

    【python海洋专题十五】给colorbar加单位

    【python海洋专题十六】对大陆周边的数据进行临近插值

    【python海洋专题十七】读取几十年的OHC数据,画四季图

    【python海洋专题十八】读取Soda数据,画subplot的海表面高度四季变化图

    【python海洋专题十九】找范围的语句进阶版本

    【python海洋专题二十】subplots_adjust布局调整

    【python海洋专题二十一】subplots共用一个colorbar

    【python海洋专题二十二】在海图上text

    【python海洋专题二十三】共用坐标轴

    【MATLAB海洋专题】历史汇总

    【matlab海洋专题】高级玫瑰图–风速风向频率玫瑰图–此图细节较多](https://mp.weixin.qq.com/s?__biz=MzkxMDAxNjE4MA==&mid=2247495304&idx=1&sn=1d3e7b59519062c0b89d06475073f849&chksm=c1334553f644cc45df43fd66d32ba3183e4308dd5ca65de6a8d5637452f6ed26b67074db23d0&token=1148374972&lang=zh_CN#rd)**

全文代码

图片

# -*- coding: utf-8 -*-
# ---导入数据读取和处理的模块-------
from netCDF4 import Dataset
from pathlib import Path
import xarray as xr
import numpy as np
# ------导入画图相关函数--------
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties
import matplotlib.ticker as ticker
from cartopy import mpl
import cartopy.crs as ccrs
import cartopy.feature as feature
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
from pylab import *
# -----导入颜色包---------
import seaborn as sns
from matplotlib import cm
import palettable
from palettable.cmocean.diverging import Delta_4
from palettable.colorbrewer.sequential import GnBu_9
from palettable.colorbrewer.sequential import Blues_9
from palettable.scientific.diverging import Roma_20
from palettable.cmocean.diverging import Delta_20
from palettable.scientific.diverging import Roma_20
from palettable.cmocean.diverging import Balance_20
from matplotlib.colors import ListedColormap
#     -------导入插值模块-----
from scipy.interpolate import interp1d  # 引入scipy中的一维插值库
from scipy.interpolate import griddata  # 引入scipy中的二维插值库
from scipy.interpolate import interp2d


# ----define reverse_colourmap定义颜色的反向函数----
def reverse_colourmap(cmap, name='my_cmap_r'):
    reverse = []
    k = []


    for key in cmap._segmentdata:
        k.append(key)
        channel = cmap._segmentdata[key]
        data = []


        for t in channel:
            data.append((1 - t[0], t[2], t[1]))
        reverse.append(sorted(data))


    LinearL = dict(zip(k, reverse))
    my_cmap_r = mpl.colors.LinearSegmentedColormap(name, LinearL)
    return my_cmap_r




# ---colormap的读取和反向----
cmap01 = Balance_20.mpl_colormap
cmap0 = Blues_9.mpl_colormap
cmap_r = reverse_colourmap(cmap0)
cmap1 = GnBu_9.mpl_colormap
cmap_r1 = reverse_colourmap(cmap1)
cmap2 = Roma_20.mpl_colormap
cmap_r2 = reverse_colourmap(cmap2)
# ---read_data---
f1 = xr.open_dataset(r'E:\data\soda\soda3.12.2_5dy_ocean_reg_2017.nc')
print(f1)
# # 提取经纬度(这样就不需要重复读取)
lat = f1['yt_ocean'].data
lon = f1['xt_ocean'].data
u = f1['u'].data
v = f1['v'].data
depth = f1['st_ocean'].data
# print(depth)
time = f1['time'].data
# print(time)
# # -------- find scs 's temp-----------
ln1 = np.where(lon >= 100)[0][0]
ln2 = np.where(lon >= 125)[0][0]
la1 = np.where(lat >= 0)[0][0]
la2 = np.where(lat >= 25)[0][0]
# time_all=[(time>=1058760) & (time<=1059096)]   #13-27 Oct
# # # 画图网格
lon1 = lon[ln1:ln2]
lat1 = lat[la1:la2]
X, Y = np.meshgrid(lon1, lat1)
u_aim = u[:, 0, la1:la2, ln1:ln2]
v_aim = v[:, 0, la1:la2, ln1:ln2]
# # # ----------对时间维度求平均 得到年平均的current------------------
u_year_mean = np.mean(u_aim[:, :, :], axis=0)
v_year_mean = np.mean(v_aim[:, :, :], axis=0)


# ----plot--------------
scale = '50m'
plt.rcParams['font.sans-serif'] = ['Times New Roman']  # 设置整体的字体为Times New Roman
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
mpl.rcParams["mathtext.fontset"] = 'cm' #数学文字字体
mpl.rcParams["font.size"] = 12   #字体大小
mpl.rcParams["axes.linewidth"] = 1   #轴线边框粗细(默认的太粗了)
fig = plt.figure(dpi=300, figsize=(3, 2), facecolor='w', edgecolor='blue')  # 设置一个画板,将其返还给fig
ax = fig.add_axes([0.05, 0.08, 0.92, 0.8], projection=ccrs.PlateCarree(central_longitude=180))
ax.set_extent([100, 123, 0, 25], crs=ccrs.PlateCarree())  # 设置显示范围
land = feature.NaturalEarthFeature('physical', 'land', scale, edgecolor='face',
                                   facecolor=feature.COLORS['land'])
ax.add_feature(land, facecolor='0.6')
ax.add_feature(feature.COASTLINE.with_scale('50m'), lw=0.3)  # 添加海岸线:关键字lw设置线宽; lifestyle设置线型
cs = ax.quiver(X, Y, u_year_mean, v_year_mean, color='b', scale=5, zorder=0, width=0.003, headwidth=3,
               headlength=4.5, transform=ccrs.PlateCarree())
# --------------添加标题----------------
ax.set_title('南海表层流速', loc="center", fontsize=6, pad=1)
# ------------------利用Formatter格式化刻度标签-----------------
ax.set_xticks(np.arange(100, 123, 4), crs=ccrs.PlateCarree())  # 添加经纬度
ax.set_xticklabels(np.arange(100, 123, 4), fontsize=4)
ax.set_yticks(np.arange(0, 25, 2), crs=ccrs.PlateCarree())
ax.set_yticklabels(np.arange(0, 25, 2), fontsize=4)
ax.xaxis.set_major_formatter(LongitudeFormatter())
ax.yaxis.set_major_formatter(LatitudeFormatter())
ax.tick_params(axis='x', top=True, which='major', direction='in', length=3, width=0.8, labelsize=5, pad=0.8, color='k')  # 刻度样式  pad代表标题离轴的远近
ax.tick_params(axis='y', right=True, which='major', direction='in', length=3, width=0.8, labelsize=5, pad=0.8, color='k')  # 更改刻度指向为朝内,颜色设置为蓝色
gl = ax.gridlines(crs=ccrs.PlateCarree(), draw_labels=False, xlocs=np.arange(100, 123, 4), ylocs=np.arange(0, 25, 2),
                  linewidth=0.25, linestyle='--', color='k', alpha=0.8)  # 添加网格线
gl.top_labels, gl.bottom_labels, gl.right_labels, gl.left_labels = False, False, False, False
plt.savefig('current0.jpg', dpi=600, bbox_inches='tight', pad_inches=0.1)  # 输出地图,并设置边框空白紧密
plt.show()

微信号 / bur_ge

QQ / 916490285

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

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

相关文章

海通国际:颐海国际第三方业务表现承压,关联方收入恢复

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;由于颐海国际&#xff08;01579&#xff09;发布2023年半年报&#xff1a;23H1主营业务收入同比-2.7%至26.16亿元&#xff0c;归母净利润同比36.0%至3.58亿元&#xff0c;海通国际发布关于颐海国际…

如何使用C/C++刷新修改已经打印显示在终端上的内容

写本文的起源是因为在安装一些工具的时候&#xff0c;发现在终端上并行安装的情况下&#xff0c;显示安装信息是会修改之前已经打印出来的内容&#xff0c;这是怎么做到的呢&#xff1f;抱着对这个问题的好奇我进行了一些探索。 终端是如何运行的 首先是最关键的问题&#xf…

一文了解数据管理框架以及数据战略制定方法

这一节主要介绍数据管理这一章的另一重要部分&#xff0c;也就是我们在数据管理经常使用到的数据管理框架以及数据战略制定方法。 要制定数据管理框架&#xff0c;或者是组织需要制定数据治理规划或数据管理规划&#xff0c;需要首先制定与业务战略对齐的数据战略。 01、数据…

图片转base64

图片转 base64 我们将展示如何将图片转换为 base64 编码&#xff0c;并演示如何读取选择的文件并显示在页面中。 base64 编码转换 const a atob("sasd"); // 将 base64 编码转换为原始字符串 console.log(a); // sasdconst b btoa(a); // 将原始字符串转换为 ba…

集结AI创新力量,“华为云杯”2023人工智能应用创新大赛圆满落幕

在AI梦想照进现实的同时&#xff0c;一场历时近三个月的“华为云杯” 2023 人工智能应用创新大赛终于落下帷幕。自6月份启动以来&#xff0c;此次大赛在全国范围内汇聚AI人才、聚焦AI应用场景创新&#xff0c;今年大赛吸引了来自全国各地的5714名优秀精英和153个优秀团队报名参…

00TD时尚儿童穿搭,这件小熊毛衣太好看了吧

寒冷的秋冬季怎么少的了毛衣呢 软糯亲肤又时尚百搭的款谁不爱 除了纯色还有条纹设计 可爱小熊图案可爱又吸睛 经典时尚的款怎么穿都好看哦&#xff01;

二叉树的前 中 后序的非递归实现(图文详解)

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

在亚马逊云科技Amazon SageMaker上进行Stable Diffusion模型训练和推理

Stable Diffusion Quick Kit是一个基于亚马逊云科技Amazon SageMaker进行Stable Diffusion模型快速部署的工具包&#xff0c;包括了一组示例代码、服务部署脚本、前端UI&#xff0c;可以帮助可以快速部署一套Stable Diffusion的原型服务。 本文将介绍如何在SageMaker Training …

想要上抖音同城热搜榜很难吗

首先&#xff0c;我们需要了解抖音同城热搜榜的推荐机制。抖音采用了先进的推荐算法&#xff0c;根据用户的行为、兴趣和社交关系进行内容推荐。一个具有话题性的内容往往能够引发用户的讨论和传播。在创作过程中&#xff0c;可以从热门事件、潮流话题、地域特色等方面切入&…

VB.Net 任务管理器相关操作

WindowsExplorer 任务管理器 程序对进程文件操作类&#xff1a;&#xff08;实例&#xff09; 1、打开进程文件目录 2、激活窗口&#xff08;有主窗口的程序&#xff09; 3、关闭程序&#xff08;向进程文件发送关闭指令&#xff09; 4、结束进程 5、挂起 6、恢复挂起 …

MDNNSVM

介绍 h v , l ^{v,l} v,l σ \sigma σ((W v , l ) T ^{v,l})^T v,l)Th v , l − 1 ^{v,l-1} v,l−1b v , l ^{v,l} v,l) h 1 ^1 1 σ \sigma σ( ∑ v 1 V \sum_{v1}^V ∑v1V​W v , L 1 ) T ^{v,L1})^T v,L1)Th v , L ^{v,L} v,Lb v , L 1 ^{v,L1} v,L1) h 1 ^1 1是融合DN…

群晖synology DSM 7.2设置钉钉Webhooks通知

现在越来越多的小伙伴都有了自己的Nas系统&#xff0c;为了更加方便的接收Nas的消息&#xff0c;这篇文章带着大家一起配置一个钉钉&#xff08;机器人&#xff09;即时消息通知 首先登录钉钉的开放平台&#xff1a;开发者后台统一登录 - 钉钉统一身份认证 1.创建一个机器人&…

getBoundingClientRect使用场景(table固定表头)

getBoundingClientRect()用于获得页面中某个元素的左&#xff0c;上&#xff0c;右和下分别相对浏览器视窗的位置&#xff0c;是DOM元素到浏览器可视范围的距离&#xff08;不包含文档scroll的部分&#xff09;。该函数返回一个Object对象&#xff0c;该对象有6个属性&#xff…

【前端学习】—箭头函数和普通函数的区别(十四)

【前端学习】—箭头函数和普通函数的区别&#xff08;十四&#xff09; 一、箭头函数和普通函数的区别 const obj{fullName:zz,sayName(){console.log(this.fullName,this.fullName)//zz}}obj.sayName();const obj{fullName:zz,sayName:()>{console.log(this.fullName,this…

魔行观察》一款免费的品牌/商业地产数据查询平台

给大家推荐一款免费的商业数据查询平台"魔行观察"&#xff0c;可免费查询品牌&#xff0c;品牌门店&#xff0c;商场&#xff0c;全国小区&#xff0c;写字楼等相关信息&#xff0c;更多数据敬请期待 小程序搜索&#xff1a;魔行观察 即可使用

光致发光荧光量子检测溶液有哪些优点?

光致发光荧光量子检测是一种测试技术&#xff0c;可以用来测量荧光材料的荧光光谱、荧光量子效率和发光寿命等参数&#xff0c;具有高灵敏度、高分辨率和自动化程度高等优点。在溶液状态下&#xff0c;荧光材料会吸收一定波长的光能并释放出次级光&#xff0c;即荧光&#xff0…

77.每日一练:迭代器遍历容器(牛客)

目录 问题描述&#xff1a; 代码解决以及思想 知识点 问题描述&#xff1a; 代码解决以及思想 #include <iostream> // write your code here...... #include <vector>using namespace std;int main() {// write your code here......vector<int> v;for (…

WMS系统盘点管理

一、定义 WMS系统的盘点管理是指对仓库内的物料、商品和库存进行周期性或特定时点的实际数量核对和比对系统记录的过程。它旨在确保仓库库存的准确性&#xff0c;发现和纠正库存偏差&#xff0c;并提供可靠的库存数据供企业决策使用。 二、流程 WMS系统盘点管理的流程通常包括…

深度学习 | CNN卷积核与通道

10.1、单通道卷积 以单通道卷积为例&#xff0c;输入为&#xff08;1,5,5&#xff09;&#xff0c;分别表示1个通道&#xff0c;宽为5&#xff0c;高为5。 假设卷积核大小为3x3&#xff0c;padding0&#xff0c;stride1。 运算过程&#xff1a; 不断的在图像上进行遍历&#…

Java对象数组练习

定义数组存储三个商品对象&#xff0c;商品的属性&#xff1a;id&#xff0c;名字&#xff0c;价格&#xff0c;库存&#xff0c;创建三个商品对象&#xff0c;并把商品对象存入到数组中 public class Goods {private String id;private String name;private double price;pri…