这里一步一步解释。
首先考虑以下示例:
[X,Y,Z1] = peaks;
figure(1)
[~,h1] = contourf(X,Y,Z1,20);
a1 = colorbar;
colormap(jet)
caxis([-6,6])
这将为您提供以下情节:
它具有线性数据和线性颜色图。现在我想缩放Z
-Data 以使其像您的情况一样非线性。我选择了一个简单的数据平方。
Z2 = get(h1,'ZData');
scalefactor = @(x) sign(x).*x.^2;
Z2 = scalefactor(Z2);
那是实际的示例数据,类似于您的:
figure(2)
[~,h2] = contourf(X,Y,Z2,20);
a2 = colorbar;
colormap(jet)
caxis([-6^2,6^2])
现在我们有非线性数据,但仍然是线性colormap
的colorbar
。
到目前为止,一切都是为了生成与您类似的示例数据。
现在实际答案:
获取绘图数据:
Z3 = get(h2,'ZData');
并使用您希望或多或少知道的关系对其进行缩放:
descalefactor = @(x) sign(x).*abs(x).^(1/2);
Z3 = descalefactor(Z3);
绘制缩放数据:
figure(3)
[~,h3] = contourf(X,Y,Z3,20);
a3 = colorbar;
colormap(jet)
caxis([-6,6])
获取Y-Ticks
and scale it with the inverse function
,就像您的数据一样:
ticks = get(a3,'YTick');
ticks = scalefactor(ticks);
设置这些反向缩放的颜色条刻度:
set(a3,'YTickLabel',ticks)
你终于得到了一个看似线性化的图(但你可以只备份你之前的非线性数据),带有非线性颜色图和颜色条刻度。
正如预期的那样,该图看起来与第一个示例中的相同,但具有缩放的颜色条轴。
如果您没有任何函数关系,请尝试获得一个,例如使用曲线拟合工具箱。