直接使用contourf,需要有[X,Y] = meshgrid(x,y), 并用Z=f(X,Y)来生成Z轴。但是如果一开始Z轴坐标就不是x,y用函数生成的,而是有个默认的测试数据,又该如何用来画MAP图呢?
clc;clear;clf;
data_ECO= []; //具体数值可以自己填,此处为转速,转矩,效率的N行三列矩阵。
SPD_ECO = data_ECO(:,1)';
TRQ_ECO = data_ECO(:,2)';
EFF_ECO = data_ECO(:,3)';
%num_levels = 15; % 例如设置15个等高线级别
%v = linspace(min(EFF_ECO), max(EFF_ECO), num_levels);//此处将这两行屏蔽,因为实际使用不如直接在clabel中指定[60,65,75,80,90,95]看起来效果好。
[X, Y] = meshgrid(min(SPD_ECO):1:max(SPD_ECO), min(TRQ_ECO):1:max(TRQ_ECO)); //也有将坐标间隔定的更小,例如0.1的,但是此处我尝试了0.1,0.2,0.5,发现因为我数据量较小,区别不大,遂选1。
% 使用griddata插值C到网格上
Z = griddata(SPD_ECO, TRQ_ECO, EFF_ECO, X, Y, 'natural'); //这里参数可以选择'natural','cubic','linear'等
% 使用contourf绘制等高线填充图
[ContourMatrix, hContour] = contourf(X, Y, Z);
hColorbar = colorbar;
caxis([min(EFF_ECO) max(EFF_ECO)]); % 设置颜色条的范围,比如0到100
clabel(ContourMatrix, hContour, [65,70,75,80,85,90,95], 'Color', 'k');
colormap(jet); % 或者可以选择其他颜色映射
xlabel('Speed (rpm)');
ylabel('Shifting Torque (Nm)');
title('Efficiency Map of economic model');
axis tight; % 使轴紧密地围绕数据
生成图如下:(为防止数据泄露,所以我修改了亿点数据(捂脸),各位看官请见谅)