泰勒图 Matlab代码
案例数据详细提供了2套泰勒图画法:原始数据的泰勒图与对数据标准化后的泰勒图
泰勒图本质上是巧妙的将模型的相关系数(correlation coefficient)、中心均方根误差(centered root-mean-square)和标准差(standard Deviation)三个评价指标整合在一张极坐标图上,其基于的便是三者之间构成的余弦关系。
程序包括计算:SD、相关系数、RMSE等指标
文章目录
以下是一个基于 MATLAB 的泰勒图绘制代码,包含两种情况: 原始数据的泰勒图 和 标准化后的泰勒图。代码中提供了详细注释,并附带示例数据。
1. 主程序:泰勒图绘制
1.1 数据准备
% 示例数据
obs = [3.5, 4.2, 5.1, 6.3, 7.8, 8.9, 9.5, 10.2]; % 观测值 (基准)
sim1 = [3.6, 4.0, 5.3, 6.1, 7.7, 8.8, 9.6, 10.1]; % 模拟值 1
sim2 = [3.4, 4.1, 5.0, 6.4, 7.9, 9.0, 9.4, 10.3]; % 模拟值 2
% 标准化数据
obs_std = (obs - mean(obs)) / std(obs);
sim1_std = (sim1 - mean(sim1)) / std(sim1);
sim2_std = (sim2 - mean(sim2)) / std(sim2);
% 绘制原始数据的泰勒图
figure;
taylorDiagram(obs, {sim1, sim2}, {'Sim1', 'Sim2'}, 'Original Data Taylor Diagram');
% 绘制标准化后的泰勒图
figure;
taylorDiagram(obs_std, {sim1_std, sim2_std}, {'Sim1_std', 'Sim2_std'}, 'Standardized Data Taylor Diagram');
2. 泰勒图绘制函数
2.1 泰勒图绘制函数
function taylorDiagram(obs, sims, labels, titleText)
% 输入参数:
% obs: 观测值 (基准)
% sims: 模拟值的 cell 数组,每个元素为一个模拟值向量
% labels: 对应模拟值的标签
% titleText: 图表标题
% 计算观测值的标准差
std_obs = std(obs);
% 创建极坐标图
figure;
ax = axes('Polar', 'on', 'Units', 'Normalized', 'Position', [0.1, 0.1, 0.8, 0.8]);
hold(ax, 'on');
% 绘制标准差圆圈
maxStd = 1.5 * std_obs; % 最大标准差范围
theta = linspace(0, 2*pi, 100);
for r = 0.2:maxStd/5:maxStd
plot(ax, theta, r * ones(size(theta)), '--k', 'LineWidth', 0.5);
text(ax, pi/2, r, num2str(r), 'VerticalAlignment', 'bottom', 'HorizontalAlignment', 'center');
end
% 绘制相关系数弧线
for rho = 0.1:0.1:1
x = rho * maxStd * cos(acos(rho));
y = rho * maxStd * sin(acos(rho));
plot(ax, [0, acos(rho)], [0, sqrt(maxStd^2 - x^2)], '-k', 'LineWidth', 0.5);
if rho >= 0.2
text(ax, acos(rho), sqrt(maxStd^2 - x^2) + 0.1, num2str(rho), 'VerticalAlignment', 'bottom');
end
end
% 绘制观测点
plot(ax, 0, std_obs, 'ko', 'MarkerFaceColor', 'k', 'MarkerSize', 8); % 观测点
text(ax, 0, std_obs + 0.2, 'Observation', 'HorizontalAlignment', 'center');
% 绘制模拟点
colors = lines(length(sims)); % 自动选择颜色
for i = 1:length(sims)
sim = sims{i};
std_sim = std(sim); % 模拟值标准差
corr = corrcoef(obs, sim); % 相关系数
rho = corr(1, 2);
% 极坐标转换
theta = acos(rho);
r = std_sim;
% 绘制点
plot(ax, theta, r, 'o', 'MarkerFaceColor', colors(i, :), 'MarkerSize', 8);
text(ax, theta, r + 0.2, labels{i}, 'HorizontalAlignment', 'center');
end
% 设置图形属性
xlim(ax, [0, maxStd]);
ylim(ax, [0, maxStd]);
title(titleText);
xlabel('Standard Deviation');
ylabel('Correlation Coefficient');
end
—
3. 功能说明
-
输入数据:
obs
是观测值(基准),用于计算标准差和相关系数。sims
是模拟值的集合,可以是多个模拟值的对比。
-
标准化处理:
- 使用
(x - mean(x)) / std(x)
对数据进行标准化,使得所有数据均值为 0,标准差为 1。
- 使用
-
泰勒图绘制逻辑:
- 使用极坐标图表示标准差和相关系数。
- 横轴表示标准差,纵轴表示相关系数。
- 观测点固定在
(0, std_obs)
,模拟点根据其标准差和相关系数定位。
-
结果展示:
- 原始数据的泰勒图展示了模拟值与观测值之间的绝对差异。
- 标准化后的泰勒图消除了量纲影响,便于比较不同变量之间的模拟性能。
4. 示例输出
4.1 原始数据的泰勒图
- 展示了模拟值与观测值之间的绝对差异。
- 可以直观看到模拟值的标准差和相关性。
4.2 标准化后的泰勒图
- 所有数据标准化后,消除了量纲的影响。
- 更适合比较不同变量之间的模拟效果。
5. 总结
该代码实现了泰勒图的绘制,支持原始数据和标准化数据两种形式。通过泰勒图,可以直观评估模拟值与观测值之间的相似性,包括标准差、相关系数等指标。希望这些代码能够帮助你完成泰勒图的分析任务!