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

news2024/11/18 12:16:33

本期内容

读取多年数据,画四季图

Part01.

多年数据处理

图片
多年年平均的OHC分布

图片
春夏秋冬:

ohc_all_new = np.reshape(ohc_new, (12, 80, 29, 27), order=‘C’)
ohc_all_season_mean = np.mean(ohc_all_new, axis=1)
ohc_season = np.reshape(ohc_all_season_mean, (3, 4, 29, 27), ‘C’)
ohc_season_mean = np.mean(ohc_season, axis=0)

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

我看变化不大啊!不会数据处理问题吧!

于是又画了一年的四季:

一年的平均:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

tem_spr = (tem_all[2,:,:]+tem_all[3,:,:]+tem_all[4,:,:])/3

3:sum季6-7-8

tem_sum = (tem_all[5,:,:]+tem_all[6,:,:]+tem_all[7,:,:])/3

4:aut季9-10-11

tem_aut = (tem_all[8,:,:]+tem_all[9,:,:]+tem_all[10,:,:])/3

5:win季12-1-2

tem_win = (tem_all[0,:,:]+tem_all[1,:,:]+tem_all[11,:,:])/3

一年的四季变化也不是很大。

说明热含量一年四季变化就是不大哈!

全文代码

图片
多年的四季:一年的四季:以前更新过了哈!

# -*- coding: utf-8 -*-
# %%
# Importing related function packages
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.feature as feature
import numpy as np
import matplotlib.ticker as ticker
from cartopy import mpl
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter
from cartopy.mpl.gridliner import LONGITUDE_FORMATTER, LATITUDE_FORMATTER
from matplotlib.font_manager import FontProperties
from netCDF4 import Dataset
from pylab import *
import seaborn as sns
from matplotlib import cm
from pathlib import Path
import xarray as xr
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
import pickle


# ----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)
# -------------# 指定文件路径,实现批量读取满足条件的文件------------
filepath = Path('E:\data\IAP\IAP_ocean_heat_content_data\IAP_Ocean_heat_content_0_2000m\\')
filelist = list(filepath.glob('*.nc'))
print(filelist)
# -------------读取其中一个文件的经纬度数据,制作经纬度网格(这样就不需要重复读取)-------------------------
a = Dataset(filelist[1])
print(a)
# 随便读取一个文件(一般默认需要循环读取的文件格式一致)
f1 = xr.open_dataset(filelist[1])
print(f1)
# 提取经纬度(这样就不需要重复读取)
lat = f1['lat'].data
lon = f1['lon'].data
# -------- find scs 's temp-----------
print(np.where(lon >= 100))  # 99
print(np.where(lon >= 123))  # 122
print(np.where(lat >= 0))  # 90
print(np.where(lat >= 25))  # 115
# # 画图网格
lon1 = lon[98:125]
lat1 = lat[88:117]
X, Y = np.meshgrid(lon1, lat1)
# ----------4.for循环读取文件+数据处理------------------
ohc_all = []
for file in filelist:
    with xr.open_dataset(file) as f:
        ohc = f['OHC100'].data
        ohc_mon = ohc[88:117, 98:125]
        ohc_all.append(ohc_mon)
ohc_all = np.array(ohc_all)
type(ohc_all)
print(type(ohc_all))
print(ohc_all.shape)
ohc_new = ohc_all[2:962, :, :]
print(ohc_new.shape)
ohc_all_new = np.reshape(ohc_new, (12, 80, 29, 27), order='C')
print(ohc_all_new.shape)
ohc_all_season_mean = np.mean(ohc_all_new, axis=1)
print(ohc_all_season_mean.shape)
ohc_season = np.reshape(ohc_all_season_mean, (3, 4, 29, 27), 'C')
ohc_season_mean = np.mean(ohc_season, axis=0)
print(ohc_season_mean)
ohc_all_mean = np.mean(ohc_season_mean, axis=0)
# -------------# plot  ------------
scale = '50m'
plt.rcParams['font.sans-serif'] = ['Times New Roman']  # 设置整体的字体为Times New Roman
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
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.contourf(X, Y, ohc_all_mean/1e10, levels=np.linspace(0, 1, 50), extend='both', cmap=cmap_r2,
                 transform=ccrs.PlateCarree())
# ------color-bar设置------------
cb = plt.colorbar(cs, ax=ax, extend='both', orientation='vertical', ticks=np.linspace(0, 1, 11))
cb.set_label('焦耳(1e8J)', fontsize=4, color='k')  # 设置color-bar的标签字体及其大小
cb.ax.set_title('OHC', fontsize=4, color='k')
cb.ax.tick_params(labelsize=4, direction='in')  # 设置color-bar刻度字体大小。
# cf = ax.contour(x, y, skt1[:, :], levels=np.linspace(16, 30, 5), colors='gray', linestyles='-',
#                 linewidths=0.2, transform=ccrs.PlateCarree())
# --------------图片 添加标题----------------
ax.set_title('OHC', fontsize=4)
# ------------------利用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=4, width=1, labelsize=5, pad=1, color='k')  # 刻度样式
ax.tick_params(axis='y', right=True, which='major', direction='in', length=4, width=1, labelsize=5, pad=1, 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('ohc_multi_year_mean.jpg', dpi=600, bbox_inches='tight', pad_inches=0.1)  # 输出地图,并设置边框空白紧密
plt.show()
# -plot----
# -------------# plot  ------------
scale = '50m'
plt.rcParams['font.sans-serif'] = ['Times New Roman']  # 设置整体的字体为Times New Roman
# 设置显示中文字体
mpl.rcParams["font.sans-serif"] = ["SimHei"]
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.contourf(X, Y, ohc_season_mean[0,:,:]/1e10, levels=np.linspace(0, 1, 50), extend='both', cmap=cmap_r2,
                 transform=ccrs.PlateCarree())
# ------color-bar设置------------
cb = plt.colorbar(cs, ax=ax, extend='both', orientation='vertical', ticks=np.linspace(0, 1, 11))
cb.set_label('焦耳(1e8J)', fontsize=4, color='k')  # 设置color-bar的标签字体及其大小
cb.ax.set_title('OHC', fontsize=4, color='k')
cb.ax.tick_params(labelsize=4, direction='in')  # 设置color-bar刻度字体大小。
# cf = ax.contour(x, y, skt1[:, :], levels=np.linspace(16, 30, 5), colors='gray', linestyles='-',
#                 linewidths=0.2, transform=ccrs.PlateCarree())
# --------------图片 添加标题----------------
ax.set_title('OHC', fontsize=4)
# ------------------利用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=4, width=1, labelsize=5, pad=1, color='k')  # 刻度样式
ax.tick_params(axis='y', right=True, which='major', direction='in', length=4, width=1, labelsize=5, pad=1, 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('ohc_multi_year_spr.jpg', dpi=600, bbox_inches='tight', pad_inches=0.1)  # 输出地图,并设置边框空白紧密
plt.show()

图片
E

N

D

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

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

相关文章

移动网络 为何ping 不通自己的公网 IP?

移动网络 ping 不通自己的公网 ip,显示请求超时怎么办? 题主所谓的公网IP,并没有配置在任何主机的TCP/IP协议栈上,所以Ping不通。在浩瀚的互联网上去寻找答案,包括ChatGPT机器人,答案就是“禁Ping了“。可…

js数组按照id删除

1.使用filter()方法实现JavaScript数组id删除 (该方法写在methods里面) DelSkill(row){ console.log(row,"ww"); this.personSkillTableData this.personSkillTableData.filter(item > item.skillId ! row.skillId) }, 在上述代码中&am…

2023年天猫双11:草柴APP如何找到2023天猫双十一优惠券怎么领取使用?

2023年天猫双11活动整体分为三波,第一波为现货售卖,第二波为双11红包雨,第三波为尾款支付。2023天猫双十一可参加活预售、满减、红包、优惠券。具体如何使用草柴APP找到2023天猫双11要购买商品的优惠券,请查看详细教程。 草柴APP如…

十六、代码校验(1)

本章概要 测试 单元测试JUnit测试覆盖率的幻觉 你永远不能保证你的代码是正确的,你只能证明它是错的。 让我们先暂停编程语言特性的学习,看看一些代码基础知识。特别是能让你的代码更加健壮的知识。 测试 如果没有测试过,它就是不能工作的…

EPLAN_003#常用功能(三)

一、图形编辑 按空格键结束 二、对象捕捉、设计模式 设计模式类似于CAD中 基于基准点 复制等功能 三、比例缩放、拉伸、修剪、修改长度、圆角、倒角 四、标注 五、窗口宏、符号宏(在编辑菜单中,或者右键) 快捷键:CTRLF5 打开的时候…

Matlab之数组、包含分配给类别的值函数categorical

一、功能 categorical 是为一组有限的离散类别(例如 High、Med 和 Low)赋值的数据类型。这些类别可以采用您指定的数学排序,例如 High > Med > Low,但这并非必须。分类数组可用来有效地存储并方便地处理非数值数据&#xf…

2023-10-11 LeetCode每日一题()

2023-10-11每日一题 一、题目编号 2512. 奖励最顶尖的 K 名学生二、题目链接 点击跳转到题目位置 三、题目描述 给你两个字符串数组 positive_feedback 和 negative_feedback ,分别包含表示正面的和负面的词汇。不会 有单词同时是正面的和负面的。 一开始&…

ROS学习笔记(六)---服务通信机制

1. 服务通信是什么 在ROS中,服务通信机制是一种点对点的通信方式,用于节点之间的请求和响应。它允许一个节点(服务请求方)向另一个节点(服务提供方)发送请求,并等待响应。 服务通信机制在ROS中…

极坐标和直角坐标的积分转换

如下图所示,当 θ 不变, ρ 增大为 ρ Δ ρ ( 即 ρ 1 ) 时 \theta不变,\rho增大为\rho \Delta \rho(即\rho_1)时 θ不变,ρ增大为ρΔρ(即ρ1​)时, 面积的增量为: 1 2 θ ( ρ Δ ρ ) 2 − 1 2 θ ρ 2 θ ρ…

第二章 进程与线程 十九、死锁的概念

目录 一、定义 二、死锁、饥饿和死循环的区别 三、死锁的必要条件 四、死锁的处理策略 五、总结 一、定义 死锁是指两个或多个进程等待对方释放自己所持有的资源,导致所有进程都被阻塞,无法继续执行。这种情况可能会导致系统瘫痪,需要通…

(二)实现Bean属性依赖注入功能【手撸Spring】

一、前言 在上一篇手撸Spring之实现一个简易版IoC容器,我们先把最简单的IoC架子搭了起来,即实现了一个Bean的注入,体会了依赖反转的过程。这里提到的依赖反转,大家肯定非常耳熟了,也就是将业务对Bean的依赖反转了&…

【网络】网络编程——带你手搓简易TCP服务端(echo服务器)+客户端(四种版本)

这里写自定义目录标题 前言正式开始用生活中的例子来讲解TCP服务端和客户端代码讲解服务端基本框架创建套接字 bindlisten监听accept接收连接通信单线程版多进程①版多进程②版多线程版线程池版 客户端 收尾 前言 本篇主要讲解套接字编程,以TCP服务端和客户端为主…

MySQL为什么用b+树

索引是一种数据结构,用于帮助我们在大量数据中快速定位到我们想要查找的数据。 索引最形象的比喻就是图书的目录了。注意这里的大量,数据量大了索引才显得有意义,如果我想要在[1,2,3,4]中找到4这个数据,直接对全数据检索也很快&am…

SP605官方开发板不能扫到链的问题

很早之前的板子,近些天需要重新搞FPGA,所以又拿出来,应该以前都是在win7下开发,现在都win10了,vivado都不支持sp6,所以先得下载一个14.7版本,但是出现了新的问题,就是不能扫到链。 …

windows认证机制_NTLM

文章目录 概念本地认证 NTLMLMNTML原理网络认证 Net NTLM实际测试利用hash传递浏览上传⽂件使用 mimikatz hash传递获取域控RDPmimikatz工具使用案例 概念 原文参考:xiu --》http://www.xiusafe.com/ 域渗透就是基于 windows 域环境的渗透,而域渗透涉及…

第二证券:中概股,昨夜狂飙!

当地时间10月10日,美股三大股指集体收高,其间道指涨0.40%,标普指数涨0.52%,纳斯达克指数涨0.58%。多位美联储官员鸽派讲话支撑不再加息,投资者等待美联储9月会议纪要、美国CPI通胀数据及企业三季报等要素支撑美股持续走…

基于Docker来部署Nacos的注册中心

基于Docker来部署Nacos的注册中心 准备MySQL数据库表nacos.sql,用来存储Nacos的数据。 最终表结构如下: 在本地nacos/custom.env文件中,有一个MYSQL_SERVICE_HOST也就是mysql地址,需要修改为你自己的虚拟机IP地址: …

铝型材公司【Brilliance Group】申请1080万美元纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于新加坡的铝型材公司【Brilliance Group】近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市,股票代码为(KHIW),Brilliance…

python爬虫练手项目之获取某地企业名录

因为很多网站都增加了登录验证,所以需要添加一段利用cookies跳过登陆验证码的操作 import pandas as pd import requests from lxml import etree # 通过Chrome浏览器F12来获取cookies,agent,headers cookies {ssxmod_itna2:eqfx0DgQGQ0QGDC…

python每日一练(5)

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…