使用的是已经完善的Matlab 泰勒图的脚本,下载地址
嵌套多个函数,根据具体的使用需要,对脚本进行解读和更改
1. 计算数据
首先是计算使用的数据
具体的使用的是 taylor_statistics.m
输入数据主要是可以是结构体也可以是矩阵序列
原始的脚本需要的数据数据中不能存在NaN等数据
实际观测数据中存在部分缺测或未通过质量控制的数据
因此要修改脚本如下:
- error_check_stats.m
这里主要是将判断是数据是否为有限数据集的这部分直接注释掉。 - centered_rms_dev.m
pmean = nanmean(predicted); %修改成这样
rmean = nanmean(reference); %修改成这样
% Calculate (E')^2
crmsd = ((predicted - pmean) - (reference - rmean)).^2;
crmsd = sum(crmsd,'omitnan')/(length(predicted)-sum(isnan(predicted))); %修改成这样
crmsd = sqrt(crmsd);
- taylor_statistics.m
% 59行
ccoef = corrcoef(p,r,'rows','complete'); % modify-zg
% 67-70 行
sdevp = std(p,1,'omitnan'); % modify-zg
% Calculate standard deviation of reference field w.r.t N (sigma_r)
sdevr = std(r,1,'omitnan'); %modify-zg
2. 作图
改function的时候一定要记录,自己挖的坑
主要使用 taylor_diagram.m
其中包括:
- get_taylor_diagram_options --另外的
- get_taylor_diagram_axes
- get_taylor_diagram_arguments
获取taylor_diagram函数的参数 - display_taylor_diagram_options
- dispopt
[hp, ht, axl] = taylor_diagram(dev,RMS,c, ... %dev 等可以是结构中的数据 strct.data 也可以是矩阵
'markerLabel',label,... %标记名称
'markerColor','r',... %标记的颜色
'markerLabelColor','k',... % 标记名字的颜色
'markerSize',2,... %标记的大小
'tickRMS',(0:0.05:0.15),... % RMS的取值范围
'markerSymbol','+',... % 标记的形状
'markerKey', 'ERA-5'); % legend
%% 相关参数在get_taylor_diagram_options里面找
% 如果是需要在一个坐标系中多次做图 将 overlap 设置为on
然后修改图的亿点点细节
补充
% theta = real(acos(CORs));
% rho=srds
X = rho(2:end).*cos(theta(2:end));
Y = rho(2:end).*sin(theta(2:end));
这两个是每个点显示的坐标, 坐标仅由标准差和相关系数决定 !!!
所以会和计算出来的标准差等不完全一致
但是效果不会变!
plot_taylor_axes
这个可以设置坐标系(字体 title 这些)
相当于直接修改,比如说相关系数原始的是用英文的,如果想修改字体大小等没有option
所以就在这个脚本里面修改 37 41行可以修改标准差这些
pos1 = 45; DA = 15; %49行(默认的哈,后面有如果开了stdtitle这些的修改处,道理一样) 这个主要是修改位置的,相关系数的宽 posl 是位置, da是总长
lab = 'Correlation Coefficient'; % 可直接修改为自己需要的
set(ttt(ic),'rotation',ith-90,'color',option.colCOR, ... %56行 这是修改字体大小位置的
'horizontalalignment','center',...
'verticalalignment','bottom', ...
'fontsize',fontSize, ...
'fontweight',axlabweight);
add_legend
可以设置legend
overlay_taylor_diagram_lines
这个可以设置相关系数刻度
46行
这个是在overlay里面的不确定没有overlay可不可以哦