当前位置: 首页 > news >正文

MATLAB绘制泰勒图(Taylor diagram)

泰勒图(Taylor diagram)

泰勒图是Karl E. Taylor于2001年首先提出,主要用来比较几个气象模式模拟的能力,因此该表示方法在气象领域使用最多,但是在其他自然科学领域也有一定的应用。
泰勒图常用于评价模型的精度,常用的精度指标有相关系数(correlation coefficient)标准差(standard deviation)以及中心均方根误差(centered root-mean-square, RMSE)
一般而言,泰勒图中的散点代表模型,辐射线代表相关系数,横纵轴代表标准差,而虚线代表均方根误差。泰勒图一改以往用散点图这种只能呈现两个指标来表示模型精度的情况。
泰勒图分为标准化泰勒图未标准化泰勒图,用的比较多的是标准化泰勒图。标准化泰勒图即对参考值与变量值的标准差与均方根误差同除以参考值的标准差,令参考值=1,E=0,并消除其物理量单位。

泰勒图基本介绍

1 绘制包下载

安装网站:Taylor Diagram
在这里插入图片描述
Google Code Archive
此外,还需要"allstats"和"ptable"函数,下载链接分别如下:
Github-allstats.m函数

% STATM Compute statistics from 2 series
%
% STATM = allstats(Cr,Cf)
%
% Compute statistics from 2 series considering Cr as the reference.
% 
% Inputs:
%	Cr and Cf are of same length and uni-dimensional. They may contain NaNs.
%
% Outputs:
% 	STATM(1,:) => Mean
% 	STATM(2,:) => Standard Deviation (scaled by N)
% 	STATM(3,:) => Centered Root Mean Square Difference (scaled by N)
% 	STATM(4,:) => Correlation
%
% Notes:
%	- N is the number of points where BOTH Cr and Cf are defined
%
% 	- NaN are handled in the following way: because this function
% 		aims to compair 2 series, statistics are computed with indices
%		where both Cr and Cf are defined.
%
% 	- STATM(:,1) are from Cr (ie with C=Cr hereafter)
% 	  STATM(:,2) are from Cf versus Cr (ie with C=Cf hereafter)
%
%	- The MEAN is computed using the Matlab mean function.
%
%	- The STANDARD DEVIATION is computed as:
%			          /  sum[ {C-mean(C)} .^2]  \
%			STD = sqrt|  ---------------------  |
%			          \          N              /
%
%	- The CENTERED ROOT MEAN SQUARE DIFFERENCE is computed as:
%			           /  sum[  { [C-mean(C)] - [Cr-mean(Cr)] }.^2  ]  \
%			RMSD = sqrt|  -------------------------------------------  |
%			           \                      N                        /
%
%	- The CORRELATION is computed as:
%			      sum( [C-mean(C)].*[Cr-mean(Cr)] ) 
%			COR = --------------------------------- 
%			              N*STD(C)*STD(Cr)
%
%	- STATM(3,1) = 0 and STATM(4,1) = 1 by definition !
%
% Created by Guillaume Maze on 2008-10-28.
% Rev. by Guillaume Maze on 2010-02-10: Add NaN values handling, some checking
%				in the inputs and a more complete help
% Copyright (c) 2008 Guillaume Maze. 
% http://codes.guillaumemaze.org%
% This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or any later version.
% This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
% You should have received a copy of the GNU General Public License along with this program.  If not, see <http://www.gnu.org/licenses/>.
%function STATM = allstats(varargin)Cr = varargin{1}; Cr = Cr(:);
Cf = varargin{2}; Cf = Cf(:);%%% Check size:
if length(Cr) ~= length(Cf)error('Cr and Cf must be of same length');
end%%% Check NaNs:
iok = find(isnan(Cr)==0 & isnan(Cf)==0);
if length(iok) ~= length(Cr)warning('Found NaNs in inputs, removed them to compute statistics');
end
Cr  = Cr(iok);
Cf  = Cf(iok);
N   = length(Cr);%%% STD:
st(1) = sqrt(sum(  (Cr-mean(Cr) ).^2)  / N );
st(2) = sqrt(sum(  (Cf-mean(Cf) ).^2)  / N );
%st(1) = sqrt(sum(  (Cr-mean(Cr) ).^2)  / (N-1) );
%st(2) = sqrt(sum(  (Cf-mean(Cf) ).^2)  / (N-1) );%%% MEAN:
me(1) = mean(Cr);
me(2) = mean(Cf);%%% RMSD:
rms(1) = sqrt(sum(  ( ( Cr-mean(Cr) )-( Cr-mean(Cr) )).^2)  /N);
rms(2) = sqrt(sum(  ( ( Cf-mean(Cf) )-( Cr-mean(Cr) )).^2)  /N);%%% CORRELATIONS:
co(1) = sum(  ( ( Cr-mean(Cr) ).*( Cr-mean(Cr) )))/N/st(1)/st(1);
co(2) = sum(  ( ( Cf-mean(Cf) ).*( Cr-mean(Cr) )))/N/st(2)/st(1);%%% OUTPUT
STATM(1,:) = me;
STATM(2,:) = st;
STATM(3,:) = rms;
STATM(4,:) = co;end %function	

Github-ptable.m函数
ptable.m函数如下:

% PTABLE Creates non uniform subplot handles
%
% SUBPLOT_HANDLE = ptable(TSIZE,PCOORD)
%
% This function creates subplot handles according to
% TSIZE and PCOORD.
% TSIZE(2) is the underlying TABLE of subplots: TSIZE(1)
%	is the number of lines, TSIZE(2) the number of rows
% PCOORD(:,2) indicates the coordinates of the subplots, ie
% 	for each PCOORD(i,2), the subplot i extends from
%	initial subplot PCOORD(i,1) to subplot PCOORD(i,2)
%
% Example: 
%	figure
% 	subp = ptable([3 4],[1 6 ; 3 4 ; 9 11; 8 8]);
%	x = 0:pi/180:2*pi;
%	axes(subp(1));plot(x,cos(x));
%	axes(subp(2));plot(x,sin(x));
%	axes(subp(3));plot(x,sin(x.^2));
%	axes(subp(4));plot(x,sin(x).*cos(x));
%
% Copyright (c) 2008 Guillaume Maze. 
% http://codes.guillaumemaze.org%
% This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or any later version.
% This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
% You should have received a copy of the GNU General Public License along with this program.  If not, see <http://www.gnu.org/licenses/>.
%% TO DO: 
%		- insert input checkfunction varargout = ptable(varargin)tsize  = varargin{1}; % [iw jw] of the underlying table
pcoord = varargin{2};%figure
iw  = tsize(1);
jw  = tsize(2);
tbl = reshape(1:iw*jw,[jw iw])';
for ip = 1 : iw*jwsubp(ip) = subplot(iw,jw,ip);
end% INITIAL POSITIONS:
for ip = 1 : iw*jwposi0(ip,:) = get(subp(ip),'position');	
end% HIDE UNNCESSARY PLOTS:
for ip = 1 : iw*jwif isempty(find(pcoord(:,1)==ip))set(subp(ip),'visible','off');
%		set(subp(ip),'color','w');else
%		set(subp(ip),'color','r');end
end% CHANGE SUBPLOT WIDTH:
for ip = 1 : size(pcoord,1)ip1 = pcoord(ip,1);ip2 = pcoord(ip,2);wi = posi0(ip2,1) + posi0(ip2,3) - posi0(ip1,1);set(subp(ip1),'position',[posi0(ip1,1:2) wi posi0(ip1,4)]);
end% CHANGE SUBPLOT HEIGHT:
for ip = 1 : size(pcoord,1)ip1 = pcoord(ip,1);ip2 = pcoord(ip,2);% Find the lines we are in:[l1 c1] = find(tbl==ip1);[l2 c2] = find(tbl==ip2);% Eventually extent the plot:if l1 ~= l2wi = posi0(ip2,1) + posi0(ip2,3) - posi0(ip1,1);hg = posi0(ip1,2) + posi0(ip1,4) - posi0(ip2,2);bt = posi0(ip2,2);set(subp(ip1),'position',[posi0(ip1,1) bt wi hg]);end
endif nargout >=1varargout(1) = {subp(pcoord(:,1))};
end

1.1 函数说明

markerLabel 图例的名称;markerLegend on为显示图例,off不显示;
styleSTD,sd的线型;colOBS,

名称Name说明
‘tickRMS’坐标刻度范围
‘tickSTD’坐标刻度范围
‘tickCOR’坐标刻度范围
markerLabel图例的名称
markerLegend图例的名称[‘on’/‘off’]
styleSTDsd的线型
colOBS参考点颜色‘r’

2 案例

2.1 案例1

结果如下:
在这里插入图片描述
MATLAB代码如下:

clear
%% 导入数据
pathFigure= '.\Figures\' ;
load taylordiag_egdata.mat% Get statistics from time series:
for ii = 2:size(BUOY,1)C = allstats(BUOY(1,:),BUOY(ii,:));statm(ii,:) = C(:,2);
end
statm(1,:) = C(:,1);% Plot:
figureUnits = 'centimeters';
figureWidth = 30; 
figureHeight = 12;figure(1)
set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]);
ax = ptable([2 3],[2 2;4 6]);
iw=1;
jw=2;
alphab = 'ABCDEFG';subplot(iw,jw,1); 
plot(BUOY');
grid on;
xlabel('time (day)','FontSize',12,'FontName','Times New Roman');
ylabel('heat fluxes (W/m^2)','FontSize',12,'FontName','Times New Roman');
title(sprintf('%s: These are the different time series of daily heat fluxes (W/m^2)','A'),'fontweight','bold','FontSize',12,'FontName','Times New Roman');
set(gca,'FontSize',12,'Fontname', 'Times New Roman');
set(gca,'Layer','top');subplot(iw,jw,2); 
hold on
[pp tt axl] = taylordiag(squeeze(statm(:,2)),squeeze(statm(:,3)),squeeze(statm(:,4)),...'tickRMS',[25:25:150],'titleRMS',0,'tickRMSangle',135,'showlabelsRMS',0,'widthRMS',1,...'tickSTD',[25:25:250],'limSTD',250,...'tickCOR',[.1:.1:.9 .95 .99],'showlabelsCOR',1,'titleCOR',1);for ii = 1 : length(tt)set(tt(ii),'fontsize',9,'fontweight','bold')set(pp(ii),'markersize',12)if ii == 1set(tt(ii),'String','Buoy');elseset(tt(ii),'String',alphab(ii-1));end
end
title(sprintf('%s: Taylor Diagram at CLIMODE Buoy','B'),'fontweight','bold','FontSize',12,'FontName','Times New Roman');tt = axl(2).handle;
for ii = 1 : length(tt)set(tt(ii),'fontsize',10,'fontweight','normal','FontSize',12,'FontName','Times New Roman');
end
set(axl(1).handle,'fontweight','normal','FontSize',12,'FontName','Times New Roman');
set(gca,'FontSize',12,'Fontname', 'Times New Roman');
set(gca,'Layer','top');str= strcat(pathFigure, "Fig.1", '.tiff');
print(gcf, '-dtiff', '-r600', str);

2.2 案例2

参考

1.CSDN博客-泰勒图(Taylor diagram)
2.CSDN博客-超干货 | 泰勒图(Taylor diagram)绘制方法大汇总
3.MATLAB绘制泰勒图(10个以上model)

相关文章:

MATLAB绘制泰勒图(Taylor diagram)

泰勒图&#xff08;Taylor diagram&#xff09; 泰勒图是Karl E. Taylor于2001年首先提出&#xff0c;主要用来比较几个气象模式模拟的能力&#xff0c;因此该表示方法在气象领域使用最多&#xff0c;但是在其他自然科学领域也有一定的应用。 泰勒图常用于评价模型的精度&…...

ClickHouse高可用集群分片-副本实操(四)

目录 一、ClickHouse高可用之ReplicatedMergeTree引擎 二、 ClickHouse高可用架构准备-环境说明和ZK搭建 三、高可用集群架构-ClickHouse副本配置实操 四、ClickHouse高可用集群架构分片 4.1 ClickHouse高可用架构之两分片实操 4.2 ClickHouse高可用架构之两分片建表实操 一…...

2022年中国工业机器人行业市场回顾及2023年发展前景预测分析

工业机器人是一种能自动定位控制、可重复编程的、多功能的、多自由度的操作机&#xff0c;广泛应用于码垛、冲压、分拣、焊接、切割、喷涂、上下料等工业场景中&#xff0c;极大提高了生产效率、安全性以及智能化水平。工业机器人作为我国高端制造业的典型代表&#xff0c;近年…...

Gehpi的网络布局

Gehpi的网络布局1. 力引导布局2. 辅助布局布局是网络可视化中的重要概念&#xff0c;指将点和边通过某种策略进行排布&#xff0c;应尽可能满足以下4个原则&#xff1a; 节点均匀分布在有限的区域内避免边的交叉和弯曲保持边的长度一致整体布局能反映图内在的特性 Gephi的布局…...

华为OD机试用Python实现 -【天然蓄水库 or 天然蓄水池】(2023-Q1 新题)

华为OD机试题 华为OD机试300题大纲天然蓄水库 or 天然蓄水池题目描述输入描述输出描述说明示例一输入输出说明示例二输入输出说明示例三输入输出说明Python 代码实现算法思路华为OD机试300题大纲 参加华为...

西北工业大学大学物理(I)下期末考试2021-2022选填解析

11 告诉你n2了&#xff0c;那么l0或者1&#xff0c;后续限制类推。2 几乎每年都出。散射波波长的偏移只与散射角有关。3 产生激光的条件。先认识到激光就是受激幅射光放大。受激辐射是产生激光的必要条件&#xff0c;粒子数偏转是产生激光的必要条件&#xff0c;谐振腔也需要。…...

【数据结构】手撕红黑树

目录 一、红黑树简介 1、红黑树的简介 2、红黑树的性质 二、红黑树的插入&#xff08;看叔叔的颜色就行&#xff09; 1、为什么新插入的节点必须给红色&#xff1f; 2、插入红色节点后&#xff0c;判定红黑树性质是否被破坏 2.1情况一&#xff1a;uncle存在且为红 2.2情…...

Linux基础命令-which查找命令文件位置

文章目录 which 命令功能 语法格式 基本参数 参考实例 1&#xff09;查找chmod命令的文件位置 2&#xff09;查找chmod命令的所有路径 3&#xff09;一次性查找多个命令路径 4&#xff09;组合其他命令一起使用 5&#xff09;显示命令的版本信息 命令总结 which 命…...

在Python中,导入拓展库的规范如下:

在Python中&#xff0c;导入拓展库的规范如下&#xff1a; Import 模块名 [as 别名] from 模块名Import 对象名 [as 别名] from 模块名 import * 1.导入标准库和第三方库的方式应该不同 Python标准库已经默认安装在Python解释器中&#xff0c;因此在导入标准库时不需要…...

SEATA是什么?它的四种分布式事务模式

一、SEATA是什么&#xff1f; Seata 是一款开源的分布式事务解决方案&#xff0c;致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式&#xff0c;为用户打造一站式的分布式解决方案。 在继续学习使用SEATA之前&#xff0c;对s…...

【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 获得完美走位(2023.Q1) 文章目录 最近更新的博客使用说明去重求和题目输入输出示例一输入输出说明示例一输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。…...

如何用 chatGPT,给大家来一个自我介绍

大家好&#xff0c;我是不吃西红柿的无线机械键盘&#xff0c;我的名字叫 Keychron K3 Pro。今天&#xff0c;我通过西红柿主人的手&#xff0c;使用 chatGPT 来介绍一下我自己。我的与众不同 我是由精密机械元件制作而成&#xff0c;并采用抗键渗设计&#xff0c;以提供更快、…...

进程管理之基本概念

目录 关于进程的基本概念 进程描述符 查看进程 进程标识 进程的生命周期 僵尸进程、孤儿进程 写时拷贝技术 fork()函数 vfork()函数 终止进程 进程优先级和权重 进程地址空间 关于进程的基本概念 进程和程序是操作系统领域的两个重要的概念&#xff0c;进程是执行…...

nginx安装部署实战手册

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录一、虚拟机安装nginx1.下载安装包2.安装编译工具和库文件3.编译安装4.启动nginx5.访问首页6.开机自启结尾一、虚拟机安装nginx 1.下载安装包 官网下载地址&#xf…...

XXL-JOB任务调度平台

什么是xxl-job&#xff1f; xxl-job是一个分布式的任务调度平台&#xff0c;其核心设计目标是&#xff1a;学习简单、开发迅速、轻量级、易扩展&#xff0c;现在已经开放源代码并接入多家公司的线上产品线&#xff0c;开箱即用。xxl是xxl-job的开发者大众点评的许雪里名称的拼…...

android UI优化的基本原理和实战方法

任何Android应用都需要UI跟用户交互.UI是否好坏更是直接影响到用户的体验.如今UI的优化视乎是应用开发中一个绕不过去的话题。所以本篇文章小编带大家全面了解Android ui优化的主要知识和优化方法。 一、UI优化 UI优化知识点主要分为三部分&#xff1a; 第一部分&#xff0c…...

指针的进阶【中篇】

文章目录&#x1f4c0;4.数组参数&#x1f4bf;4.1.一维数组传参&#x1f4bf;4.2.二维数组传参&#x1f4c0;5.指针参数&#x1f4bf;5.1.一级指针传参&#x1f4bf;5.2.二级指针传参&#x1f4c0;6.函数指针&#x1f4bf;6.1. 代码1&#x1f4bf;6.2. 代码2&#x1f4c0;7.函…...

华为OD机试题,用 Java 解【删除字符串中出现次数最少的字符】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…...

【C语言每日一题】猜名次

【C语言每日一题】—— 猜名次&#x1f60e;&#x1f60e;&#x1f60e; &#x1f4a1;前言&#x1f31e;&#xff1a; &#x1f49b;猜名次题目&#x1f49b; &#x1f4aa; 解题思路的分享&#x1f4aa; &#x1f60a;题目源码的分享&#x1f60a; &#x1f449; 本菜鸡…...

89. 格雷编码

89. 格雷编码题目数学公式动态规划回溯题目 传送门&#xff1a;https://leetcode.cn/problems/gray-code/ 数学公式 int gray(int n) { // 计算第n位格雷码公式return n ^ (n >> 1); }然后你写一个for循环&#xff0c;计算从1到n的所有格雷码&#xff0c;添加到答…...

AI专著写作快车道:特色工具大集合,助力科研成果出版

学术专著写作困境与AI工具助力 学术专著的写作并不只是简单的“写出来”&#xff0c;更在于能否顺利“出版、得到认可”。在当前的出版市场&#xff0c;学术专著的受众本就相对有限&#xff0c;因此出版社对学术价值和作者的影响力要求非常高。许多作者虽然完成了初稿&#xf…...

终极指南:如何构建现代化微服务架构 - Zend Framework Expressive完整教程

终极指南&#xff1a;如何构建现代化微服务架构 - Zend Framework Expressive完整教程 【免费下载链接】zendframework Official Zend Framework repository 项目地址: https://gitcode.com/gh_mirrors/ze/zendframework 在当今快速发展的微服务架构时代&#xff0c;PHP…...

【AI知识点】交叉注意力机制:连接不同世界的“信息桥梁”

1. 从"信息桥梁"理解交叉注意力机制 想象你正在同时阅读一本英文书和它的中文翻译版。当你遇到一个不太理解的英文句子时&#xff0c;会自然地在中文版本中寻找对应的段落来帮助理解——这个过程就像交叉注意力机制在神经网络中的工作方式。它就像是架设在两个不同世…...

SystemVerilog实战:在Vivado 2023.1中实现跨文件clog2计算的3种方法

SystemVerilog实战&#xff1a;在Vivado 2023.1中实现跨文件clog2计算的3种方法 当我们将传统Verilog项目迁移到SystemVerilog环境时&#xff0c;经常会遇到$clog2函数的兼容性问题。这个看似简单的对数计算函数&#xff0c;在不同工具链和文件类型中的表现可能大相径庭。特别是…...

RVC与FunASR联动:中文语音识别+AI翻唱端到端流水线

RVC与FunASR联动&#xff1a;中文语音识别AI翻唱端到端流水线 1. 引言&#xff1a;当AI翻唱遇见语音识别 想象一下这个场景&#xff1a;你有一段喜欢的歌曲音频&#xff0c;想用自己的声音翻唱它&#xff0c;但苦于记不住歌词&#xff0c;或者原唱语速太快跟不上。传统的做法…...

57:L构建紫队协同:蓝队的协同防御

作者&#xff1a; HOS(安全风信子) 日期&#xff1a; 2026-03-07 主要来源平台&#xff1a; GitHub 摘要&#xff1a; 传统的红队和蓝队分离模式存在沟通障碍&#xff0c;导致防御效率低下。L构建了一套紫队协同系统&#xff0c;通过AI驱动的团队协作、知识共享和防御优化&…...

OpenClaw是什么?OpenClaw能做什么?OpenClaw详细介绍及保姆级部署教程-周红伟

1. 什么是 OpenClaw&#xff1f; 1.1 核心定义 OpenClaw&#xff08;前身为 Clawdbot/Moltbot&#xff09;是一款开源、本地优先、可执行任务的 AI 自动化代理引擎&#xff0c;遵循 MIT 协议。它以自然语言指令为驱动&#xff0c;在本地或私有云环境中完成文件操作、流程编排…...

3分钟解锁外语游戏:XUnity自动翻译器让你无障碍畅玩全球游戏 [特殊字符]

3分钟解锁外语游戏&#xff1a;XUnity自动翻译器让你无障碍畅玩全球游戏 &#x1f3ae; 【免费下载链接】XUnity.AutoTranslator 项目地址: https://gitcode.com/gh_mirrors/xu/XUnity.AutoTranslator 还在为看不懂的外语游戏而烦恼吗&#xff1f;XUnity自动翻译器就是…...

S32K3XX车载以太网驱动:从硬件接口到数据收发的全链路解析

1. S32K3XX车载以太网驱动的硬件架构解析 第一次接触S32K3XX系列芯片的车载以太网驱动时&#xff0c;最让我头疼的就是那一堆专业术语&#xff1a;MAC、PHY、MII、MDIO... 后来在实际项目中摸爬滚打才发现&#xff0c;理解硬件架构就像拆解汽车的发动机&#xff0c;只要搞清各个…...

从理论到实践:LSTM与Qwen1.5-1.8B GPTQ在时序预测任务中的对比

从理论到实践&#xff1a;LSTM与Qwen1.5-1.8B GPTQ在时序预测任务中的对比 最近在折腾时间序列预测&#xff0c;发现一个挺有意思的现象。大家一提到时序预测&#xff0c;脑子里蹦出来的第一个词可能就是LSTM&#xff0c;这几乎成了这个领域的“标配”。但另一边&#xff0c;以…...