我想在第一张图片中显示非均匀颜色条.我试过下面的代码.'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)
图片1:
图2:
这里有一步一步的解释.
首先考虑以下示例:
[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
和scale it with the inverse function
,就像你的数据:
ticks = get(a3,'YTick'); ticks = scalefactor(ticks);
设置这些反向缩放的颜色条标记:
set(a3,'YTickLabel',ticks)
你终于得到了一个看似线性化的图(但你可以从之前备份你的非线性数据),带有非线性色图和彩条标记.
正如预期的那样,该图看起来与第一个示例中的相同,但是使用缩放的颜色条轴.
如果您没有任何功能关系,请尝试使用曲线拟合工具箱.