use*_*101 4 matlab colorbar matlab-figure colormap
我想在第一张图片中显示非均匀颜色条.我试过下面的代码.'mycamp4'是手动保存的色彩映射.结果显示为第二个数字.数量0.1和1.5也将被关闭太见.如何在第一张图片中制作彩条?
v = [0.1 1 1.5 5 7.5 10 30];
v_2 = [0.1 1.5 5 7.5 10 30];
contourf(X,Y,pdf_normal',v);
h = colorbar;
load('MyColormaps','mycmap4');
set(gcf,'Colormap',mycmap4);
set(h, 'YTick', v_2)
Run Code Online (Sandbox Code Playgroud)
图片1:

图2:

这里有一步一步的解释.
首先考虑以下示例:
[X,Y,Z1] = peaks;
figure(1)
[~,h1] = contourf(X,Y,Z1,20);
a1 = colorbar;
colormap(jet)
caxis([-6,6])
Run Code Online (Sandbox Code Playgroud)
这将给你以下情节:

它具有线性数据和线性色图.现在我想缩放Z-Data以使其像你的情况一样非线性.我选择了简单的数据平方.
Z2 = get(h1,'ZData');
scalefactor = @(x) sign(x).*x.^2;
Z2 = scalefactor(Z2);
Run Code Online (Sandbox Code Playgroud)
这是实际的示例数据,类似于您的:
figure(2)
[~,h2] = contourf(X,Y,Z2,20);
a2 = colorbar;
colormap(jet)
caxis([-6^2,6^2])
Run Code Online (Sandbox Code Playgroud)

现在我们有非线性数据,但仍然是线性colormap和colorbar.
到目前为止,一切都是为了生成与您类似的示例数据.
现在的答案是:
获取您的情节数据:
Z3 = get(h2,'ZData');
Run Code Online (Sandbox Code Playgroud)
并用你希望或多或少知道的关系来扩展它:
descalefactor = @(x) sign(x).*abs(x).^(1/2);
Z3 = descalefactor(Z3);
Run Code Online (Sandbox Code Playgroud)
绘制缩放数据:
figure(3)
[~,h3] = contourf(X,Y,Z3,20);
a3 = colorbar;
colormap(jet)
caxis([-6,6])
Run Code Online (Sandbox Code Playgroud)
得到Y-Ticks和scale it with the inverse function,就像你的数据:
ticks = get(a3,'YTick');
ticks = scalefactor(ticks);
Run Code Online (Sandbox Code Playgroud)
设置这些反向缩放的颜色条标记:
set(a3,'YTickLabel',ticks)
Run Code Online (Sandbox Code Playgroud)
你终于得到了一个看似线性化的图(但你可以从之前备份你的非线性数据),带有非线性色图和彩条标记.

正如预期的那样,该图看起来与第一个示例中的相同,但是使用缩放的颜色条轴.
如果您没有任何功能关系,请尝试使用曲线拟合工具箱.