如何生成非线性色图/彩条?

 鱼儿没有水会死_543 发布于 2023-02-10 10:25

我想在第一张图片中显示非均匀颜色条.我试过下面的代码.'mycamp4'是手动保存的色彩映射.结果显示为第二个数字.数量0.11.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:

在此输入图像描述

1 个回答
  • 这里有一步一步的解释.

    首先考虑以下示例:

    [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])
    

    在此输入图像描述

    现在我们有非线性数据,但仍然是线性colormapcolorbar.

    到目前为止,一切都是为了生成与您类似的示例数据.


    现在的答案是:

    获取您的情节数据:

    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-Ticksscale it with the inverse function,就像你的数据:

    ticks = get(a3,'YTick');
    ticks = scalefactor(ticks);
    

    设置这些反向缩放的颜色条标记:

    set(a3,'YTickLabel',ticks)
    

    你终于得到了一个看似线性化的图(但你可以从之前备份你的非线性数据),带有非线性色图和彩条标记.

    在此输入图像描述

    正如预期的那样,该图看起来与第一个示例中的相同,但是使用缩放的颜色条轴.

    如果您没有任何功能关系,请尝试使用曲线拟合工具箱.

    2023-02-10 10:27 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有