毕业季要到了,毕业论文也要到了!希望能帮助到你

这个程序是做相关场的。这个的相关场是年数据的,也就是经过计算有N年的夏季数据和N年的nino某一季节的数据!

注意这里的NC文件层数是只有一层的,如果涉及多层要在NC文件读取那里改,一般NC文件都是从[ 经度  纬度 层数 时间 ] 这种顺序摆放的。

part1 输入文件的相关信息

这部分主要是输出相关NC文件和nino指数的信息,具体说明在注释里面

注意这里面的数据需要时间连续的数据

在这里就是基本上要改的内容了,都放在这里,还有不同NC文件的格式也要改,所以在NC文件读取那里就要改改

dt是滞后时间,改变dt可以做滞后相关(NC文件滞后dt年)

%% 相关场%相关说明%相关场%适用于全球数据,如果是海洋数据可以用patch覆盖陆地%第80行的m_coast可以加入('patch',[0.8 0.8 0.8])这个属性填充陆地%适用于只有一层的数据,如果多层数据要在NC文件读取那里改%t检验过检标记在最后面,如果没有需要可以直接删除%作者:施根号%% 输入的相关数据clc;clear;close all;dt = 0;                               %滞后年数reliability = 0.1;                    %信度检验,这里可以0.1,0.05或者0.01boundary = [0 360 -90 90];            %范围[起始经度 终止经度 起始纬度 终止纬度]time_start = datenum('01-01-1979');   % 月-日-年,如果是月数据再日期都是01time_end   = datenum('12-01-2018');   % 月-日-年,记得不要超出NC文件的时间inpath  = 'H:\NC文件.nc';  %NC文件位置inpath2 = 'H:\excel文件.xlsx';     %SSN指数文件位置,excel格式,记得只包含数据inpath3 = 'H:\图片输出位置';        %图片储存位置varname = 'NC文件的变量名';         %NC文件的变量名title_plot = 'XX-XX相关';          %标题及文件名

part2 数据的读取

2.1 nino指数的读取

因为大家的文件读写习惯不同,所以这里的excel文件是只有数据,没有其他说明的,比如这样:

也可以用其他格式的文件,对应换换函数就OK

%% nino指数的读取nino = xlsread(inpath2);len = length(nino);  %读取数据的年数

2.2 NC文件数据的读取

time_nc = time_nc/24 + datenum('1-jan-1800');%或者:time_nc = time_nc + datenum('1-jan-1800');

这里要特别注意这一句,matlab的时间戳和NC文件的时间戳是不一样的,所以要转换。我们可以ncdisp('文件路径')查看时间信息,如下图:

图1 units = 'hours since 1800-01-01 00:00:0.0'

图2 units= 'days since 1800-1-1 00:00:00'

第一,一些NC文件的时间系统是小时制的,也就是从说1800-1月-1日开始算到现在有多少小时,所以要除以24转换为天数;

就像图1,如果这个units = 'hours since 1800-01-01 00:00:0.0'这里是hours那就是要除以24

就像图2,如果是units= 'days since 1800-1-1 00:00:00',这里面是days,就是以天数计算,所以不用除以24就可以

第二是matlab是从公元0000年-01月-01日开始计算到现在多少天的,而NC文件是从1800年1月1日算起,所以要加上datenum('1-jan-1800')以转换为matlab的时间戳。注意一些NC文件是从从1900年1月1日算起,我们可以从units = 'hours since 1800-01-01 00:00:0.0'这个获取相关信息

%% ---读取NC文件数据--ncid=netcdf.open(inpath,'NC_NOWRITE'); %打开nc文件lon = ncread(inpath,'lon');            %查阅经度信息loncount = length(lon);                %查阅经度的精度(有多少格点)lat = ncread(inpath,'lat');            %查阅纬度信息latcount = length(lat);                %查阅纬度精度(有多少格点)%查找绘制范围对应的所在矩阵的位置,相当于截取一小段矩阵lon_scope =  find(lon >= boundary(1) & lon<=boundary(2));lat_scope =  find(lat >= boundary(3) & lat<=boundary(4));%绘制范围的数据量,重新定义边界lon_number = length(lon_scope);lat_number = length(lat_scope);lat_1=lat(lat_scope(end):-1:lat_scope(1));lon_1=lon(lon_scope(1):lon_scope(end)); [plon,plat]=meshgrid(lon_1,lat_1);%重新定义边界boundary = [double(lon_1(1)) double(lon_1(end)) double(lat_1(1)) double(lat_1(end))]; %--------读取--------time_nc = ncread(inpath,'time');time_nc = time_nc/24 + datenum('1-jan-1800');time_start = find(time_nc == time_start);time_end = find(time_nc==time_end);time_number = length(time_nc(time_start : time_end));start = [lon_scope(1),lat_scope(1),time_start];    %初始位置count = [lon_number,lat_number,time_number];        %读取范围 stride1 = [1,1,1];                        %读取步长sst(:,:,:) = ncread(inpath,varname ,start,count,stride1);netcdf.close(ncid);      %关闭nc文件

part3 相关系数的计算

1. 里面的矩阵t是检验其过不过检验的指标。例如:t<0.1则通过了显著性水平α=0.1,在代码的开头有reliability = 0.1就是这个信度指标,可以选择0.01,0.05或者0.01。

2. 经过计算后的NC文件必须和nino指数的时间层数要对应上,比如有40年nino指数,那么经过计算后NC文件的时间层数也必须要有40年,若是要其他季节的平均可以在这次基础上改循环

%% 计算%----夏季平均-----for i = 1:len    sst_w(:,:,i) = (sst(:,:,6+ 12*(i-1)) + sst(:,:,7+ 12*(i-1)) + sst(:,:,8+ 12*(i-1)))/3;endsst_1 = sst_w(:,:,1+dt:end);nino_1 = nino(1:end-dt);n = length(nino_1);% ----计算相关系数及T检验---for i = 1:lon_number    for j = 1:lat_number        s = reshape(sst_1(i,j,:),n,1);        [r_temp,t_temp] = corrcoef(nino_1,s);        r(i,j) = r_temp(1,2);  %相关系数        t(i,j) = t_temp(1,2);  %检验    endendr =  rot90(r);t =  rot90(t);

part4 绘图

这里我们要用到m_map,如果还没装m_map可以先安装

如果是海洋数据(比如海表面温度SST),那么第6行的m_coast可以加入('patch',[0.8 0.8 0.8])这个属性填充陆地

然后下面代码的第15行被注释的是把过了90%检验的地方圈起来,如果有需要可以取消注释

%% 绘图figure()m_proj('Equidistant','lat',[boundary(3) boundary(4)],'lon',[boundary(1) boundary(2)]);m_pcolor(plon,plat,r);              %添加我们要画的内容shading interp;m_coast('linewidth',1,'color','k');  %绘制海岸线% 添加边框m_grid('xtick',6,'ytick',5,'tickdir','in','yaxislocation','left','fontsize',10);title(title_plot,'fontsize',15); %标题colormap(jet);caxis([-1,1]);colorbar('location','Eastoutside');hold on%----------t检验标记,若不需要则删除-------------------------------------%[cs,h]=m_contour(plon,plat,t,[10,reliability],'r','linewidth',1.5);for i = 1:2:lon_number    for j = 1:2:lat_number        if t(j,i) <= reliability            m_plot(plon(1,i),plat(j,1),'k','marker','.','MarkerSize',2)            hold on;        end    endend%--------------删除到这------------------------------------------------cd (inpath3)                   %打开图片储存位置saveas(gcf,title_plot, 'png')  %保存图片

输出结果:

笔者水平有限,若有疏漏恳请指出!

如果对您有帮助可以点下文末的赞赏吗谢谢各位读者~

-END-

附:完整代码

%% 相关场%相关说明%相关场%适用于全球数据,如果是海洋数据可以用patch覆盖陆地%第80行的m_coast可以加入('patch',[0.8 0.8 0.8])这个属性填充陆地%适用于只有一层的数据,如果多层数据要在NC文件读取那里改%t检验过检标记在最后面,如果没有需要可以直接删除%作者:施根号%% 输入的相关数据clc;clear;close all;dt = 0;                               %滞后年数reliability = 0.1;                    %信度检验boundary = [0 360 -90 90];            %范围[起始经度 终止经度 起始纬度 终止纬度]time_start = datenum('01-01-1979');   % 月-日-年,如果是月数据再日期都是01time_end   = datenum('12-01-2018');   % 月-日-年,记得不要超出NC文件的时间inpath  = 'H:\NC文件.nc';  %NC文件位置inpath2 = 'H:\excel文件.xlsx';     %SSN指数文件位置,excel格式,记得只包含数据inpath3 = 'H:\图片输出位置';              %图片储存位置varname = 'NC文件的变量名';                      %NC文件的变量名title_plot = 'XX-XX相关';               %标题及文件名%% nino指数的读取nino = xlsread(inpath2);len = length(nino);  %读取数据的年数%% ---读取NC文件数据--ncid=netcdf.open(inpath,'NC_NOWRITE'); %打开nc文件lon = ncread(inpath,'lon');            %查阅经度信息loncount = length(lon);                %查阅经度的精度(有多少格点)lat = ncread(inpath,'lat');            %查阅纬度信息latcount = length(lat);                %查阅纬度精度(有多少格点)%查找绘制范围对应的所在矩阵的位置,相当于截取一小段矩阵lon_scope =  find(lon >= boundary(1) & lon<=boundary(2));lat_scope =  find(lat >= boundary(3) & lat<=boundary(4));%绘制范围的数据量,重新定义边界lon_number = length(lon_scope);lat_number = length(lat_scope);lat_1=lat(lat_scope(end):-1:lat_scope(1));lon_1=lon(lon_scope(1):lon_scope(end)); [plon,plat]=meshgrid(lon_1,lat_1);%重新定义边界boundary = [double(lon_1(1)) double(lon_1(end)) double(lat_1(1)) double(lat_1(end))];%--------读取--------time_nc = ncread(inpath,'time');time_nc = time_nc/24 + datenum('1-jan-1800');time_start = find(time_nc == time_start);time_end = find(time_nc==time_end);time_number = length(time_nc(time_start : time_end));start = [lon_scope(1),lat_scope(1),time_start];    %初始位置count = [lon_number,lat_number,time_number];        %读取范围 stride1 = [1,1,1];                        %读取步长sst(:,:,:) = ncread(inpath,varname ,start,count,stride1);netcdf.close(ncid);      %关闭nc文件%% 计算%----夏季平均-----for i = 1:len    sst_w(:,:,i) = (sst(:,:,6+ 12*(i-1)) + sst(:,:,7+ 12*(i-1)) + sst(:,:,8+ 12*(i-1)))/3;endsst_1 = sst_w(:,:,1+dt:end);nino_1 = nino(1:end-dt);n = length(nino_1);% ----计算相关系数及T检验---for i = 1:lon_number    for j = 1:lat_number        s = reshape(sst_1(i,j,:),n,1);        [r_temp,t_temp] = corrcoef(nino_1,s);        r(i,j) = r_temp(1,2);  %相关系数        t(i,j) = t_temp(1,2);  %检验    endendr =  rot90(r);t =  rot90(t);%% 绘图figure()m_proj('Equidistant','lat',[boundary(3) boundary(4)],'lon',[boundary(1) boundary(2)]);m_pcolor(plon,plat,r);              %添加我们要画的内容shading interp;m_coast('linewidth',1,'color','k');  %绘制海岸线% 添加边框m_grid('xtick',6,'ytick',5,'tickdir','in','yaxislocation','left','fontsize',10);title(title_plot,'fontsize',15); %标题colormap(jet);caxis([-1,1]);colorbar('location','Eastoutside');hold on%----------t检验标记,若不需要则删除-------------------------------------%[cs,h]=m_contour(plon,plat,t,[10,reliability],'r','linewidth',1.5);for i = 1:2:lon_number    for j = 1:2:lat_number        if t(j,i) <= reliability            m_plot(plon(1,i),plat(j,1),'k','marker','.','MarkerSize',2)            hold on;        end    endend%--------------删除到这------------------------------------------------cd (inpath3)                   %打开图片储存位置saveas(gcf,title_plot, 'png')  %保存图片

colormap保存 matlab_Matlab教程 | 利用NC文件进行相关系数场的计算及绘制相关推荐

  1. colormap保存 matlab_matlab中自定义colormap的保存与调用

    由于matla自带的colormap的样式可能不是自己想要的类型,因此有时候需要自定义一个自己的colormap,关于colormap的介绍可以参考博文 首先是先把自定义的colormap保存下来: ...

  2. colormap保存 matlab_matlab的colormap的保存

    很多人在用colormapeditor得到了自定义的colormap后想保存下来再次应用,如何保存并再次利用?大家可以自己help colormapeditor,如果英文看不明白,可以看看博主写的小例 ...

  3. 利用Python对栅格数据进行EOF并输出nc文件(含EOF分解)

    最近比较苦恼如何将Python处理好的多维数组重新保存为nc文件 现在我就将利用xarray库完成nc文件读写流程分享给大家 我们以计算气温的EOF为例,来教大家如何对NC文件进行读写操作 数据来源: ...

  4. NC文件不规则裁剪(利用shp文件裁剪)

    文章目录 示例数据与软件介绍 数据 软件 中国区域提取 利用Python裁剪nc文件 示例数据与软件介绍 数据 NCEP的逐月2m气温数据 中国基础shp文件 软件 这次除了常用的Python之外,我 ...

  5. python处理nc数据_python中的.nc文件处理 | 04 利用矢量边界提取NC数据

    利用矢量边界提取.nc数据 import os import numpy as np import pandas as pd import matplotlib.pyplot as plt impor ...

  6. MATLAB 长度和像素_气象编程 | Matlab教程:nc文件的打开和使用m_map绘制海温图

    添加新云天气象主编微信或QQ:130188121,及时获取或发布气象升学.就业.会议.征稿及学术动态等信息! 近期招聘.培训安排(点击图片了解详情): 在大气科学中,matlab可以用于小规模的科学计 ...

  7. MATLAB中利用ncread函数读取nc文件

    MATLAB读取NC文件 一. 目的: 了解NETCDF文件,学会利用MATLAB读取NETCDF文件 二.  撰写时间 开始时间:2016年12月03日 完成时间:2016年12月09日 三.知识储 ...

  8. 利用MATLAB读取.nc文件单像元数值并转为Excel格式(以中国日降雨量月均数据为例)

    以中国日降雨量月均数据(nc文件包含12月)为例,提取某经纬度下的多月份像元值. ([数据分享]1960-2020年中国1公里分辨率月降水数据集) 一.确定经纬度所在行列号 以92.18E,30.47 ...

  9. 【oracle】oracle筛选后导出表,载入对象选择,保存对象选择,save object selection的使用,过滤clob导出,利用osf文件

    现有如下场景:oracle导出所有表的SQL语句,包括数据. 直接用dump是不行了.导出SQL,可行,但是遇到blob,clob文件,还是没办法导出. 我们可以先把所有不带blob,clob的表筛选 ...

最新文章

  1. python 创建.txt的文件 并写内容到里面
  2. 「不会开会」是个病,这本书能治吗?
  3. 文巾解题 19. 删除链表的倒数第 N 个结点
  4. spring源码分析之spring-messaging模块详解
  5. android复选框标签,Android中的复选框的使用
  6. php验证mysql内数据_MySQL中数据类型的验证_MySQL
  7. 密码学电子书_密码学中的电子密码书(ECB)
  8. 的好处_女性做下蹲运动有什么好处 原来有这些好处
  9. PyTorch 1.0 中文文档:序列化的相关语义
  10. 【linux】ssh 远程执行命令
  11. 新手做UI?手里有几种常见的界面套路模板素材,你就成功一大半了!
  12. C#中的矩阵乘法——对图像应用变换
  13. 微信点餐系统感悟(上1-6章)
  14. [Android] Android RxJava2+Retrofit2+OkHttp3 的使用(一) --基础篇 Retrofit2 的使用
  15. sinx泰勒展开_求极限:泰勒公式应展开到第几阶?
  16. 回扣应该怎么给——某人的经验
  17. 用1、2、3、4、5、6、7、8、9这9个数字,填入□ 中使等式□□×□□□ = □□□□ 成立,每个数字恰好只用一次。
  18. 记成功安装win10+elementary双系统
  19. 浅入浅出linux中断子系统
  20. rc列联表_R语言入门之频率表和列联表

热门文章

  1. macos vmware 镜像_苹果电脑用vMware安装Windows系统
  2. java获取tomcat启动时间不对_部署在Tomcat 服务器中的web应用读取时间与系统时间不一致问题...
  3. android java.rmi不存在_ANDROID_HOME'环境变量设置为不存在的路径Jenkins
  4. 轮播图高度自适应_干货!弘成教你写轮播图全自动适应封装代码
  5. c++输入一个整数判断是否为完全平方数_[leetcode/lintcode 题解] 谷歌面试题:完美平方...
  6. c语言十进制小数转其他进制,只写出了十进制小数转换成二进制的,求二进制小数转十进制的...
  7. 人工智能的数学基础(二):函数
  8. redis的set类型
  9. canopy算法流程_Canopy聚类算法
  10. 漳州职业技术学院计算机学费多少钱,漳州职业技术学院单招2021年学费多少