MATLAB绘制泰勒图代码
开头先说明一下我用惯了R语言却为什么选择MATLAB画泰勒图
R包里能画泰勒图的有两个,如果对图件的美观度要求不高,可以选择:
openair 包或者plotrix包,画出来的效果如下,代码也比较简单。
a.plotrix包
b.openair包
以下是matlab绘图的步骤:
1.用到的附加功能包
网上主流的绘制Taylor Diagram 有两个包,直接在matlab主页面 附加功能 →获取附加功能中搜索 Taylor Diagram
MATLAB的版本是无所谓的。我这里选择PeterRochford / SkillMetricsToolbox 来画:
2.需要的数据
泰勒图简单的说就是一种可以表示标准差, 均方根误差和相关系数 三个指标的图。比单一R²和RMSE等横纵坐标的图更加直观。
它能够将多模式的相关信息集中表示,是近年来被广泛采用的应用于模式评估与检验的有效方法,能够将多个变量的标准差、与参考值的相关系数以及均方根偏差综合显示在一张二维图上,可以全面清晰反映多模式的模拟能力。
泰勒图分为标准化泰勒图和未标准化泰勒图,用的比较多的是标准化泰勒图。标准化泰勒图即对参考值与变量值的标准差与均方根误差同除以参考值的标准差,令参考值=1,E=0,并消除其物理量单位。
首先准备好画泰勒图需要的数据:
我是用R语言计算的sd,rmse和r方(用习惯了),当然也可以用MATLAB计算。
Obs一行就是参考值,根据自己的数据可以调整,我计算出的标准差分布在0-5之间,所以我将参考值设为2.5。
3.代码
close all;
% 设置图框属性,包括图位置和尺寸
set(gcf,'units','inches','position',[0,10.0,14.0,10.0]);
set(gcf,'DefaultAxesFontSize',18); % 坐标轴字体大小
%读取数据,sd rmse 和 r方
data=xlsread('K:\Weighted\taylor data2.xlsx','Sheet1','B2:D23');%文件路径
sdev = data(:,1);
crmsd = data(:,2);
ccoef = data(:,3);
%mmodel ID,我这里手动输入是因为要每个单独设置标志
ID = {'Obs','ACCESS-CM2','ACCESS-ESM1-5','AWI-CM-1-1-MR','BCC-CSM2-MR',...
'CanESM5','CIESM','EC-Earth3-CC','EC-Earth3-Veg-LR','EC-Earth3-Veg','EC-Earth3',...
'FGOALS-g3','INM-CM4-8','INM-CM5-0','IPSL-CM6A-LR','MIROC6','MPI-ESM1-2-HR','MPI-ESM1-2-LR',...
'MRI-ESM2-0','NESM3','Ensemble-Mean','Multi-Model'};
label = ID;
%>>绘制 taylor_diagram
[hp, ht, axl] = taylor_diagram(sdev,crmsd,ccoef, ...
'markerLabel',label, 'markerLegend', 'on', ...
'styleSTD', '-', 'colOBS','r', 'markerObs','o', ...
'markerSize',12, 'tickRMS',[0:1:5],'limSTD',5, ...
'tickRMSangle', 115, 'showlabelsRMS', 'on', ...
'titleRMS','on', 'titleOBS','Observation');
% 保存文件
writepng(gcf,'taylor fig.png');
结果为:
以上各参数含义:markerLabel 图例的名称;markerLegend on为显示图例,off不显示;
styleSTD,sd的线型;colOBS,参考点颜色,r为红色,在MATLAB中颜色和线型表示为:
4.再加亿点点细节
红色在图中过于突兀,通过映射关系可以调整每个点的形状和颜色: