【问题标题】:How to automate colorbar adjustment in MATLAB?如何在 MATLAB 中自动调整颜色条?
【发布时间】:2017-12-21 11:06:10
【问题描述】:

我正在 MATLAB 中绘制空间图。我拥有的数据很少有大值。

当我创建颜色条时,它的范围是 0 到 80,但大多数值都在 0 到 20 之间。

下面是值的直方图

如何在 MATLAB 中修改颜色条以显示颜色划分以显示值 >2​​0 的单独颜色划分

所需的彩条划分:[0, 4, 12, 16, 20, >20]

默认方式将颜色划分为相等的部分,随着颜色划分的大部分用于 20 到 70 之间的值,变化会丢失。

我可以像caxis([0,20]) 一样手动完成,但有什么方法可以自动完成。

【问题讨论】:

    标签: matlab spatial colorbar colormap


    【解决方案1】:

    应该这样做:

    % Assume your data is stored in x & y
    b = bar(x,y,'FaceColor','flat');
    thresholds = 0:4:20;
    colours = {'r';'b';'g';'y';'c'}; % for example
    for k = 1:length(thresholds)
        b(x>thresholds(k),:).CData = colours{k};
    end
    

    我没有测试过,没有你的数据,但希望应该可以工作。

    【讨论】:

      【解决方案2】:

      以下代码应在大约 80% 的点低于该值的点处自动设置颜色条的上限(80% 可以更改,该值与 80% 的接近程度取决于数量使用的垃圾箱)

      假设数据位于变量data

      [n,edges] = histcounts(data,'Normalization','cumcount');
      limit = edges(find(n/length(data)>0.8,1)+1); %change 0.8 here to preferred fraction
      caxis([0,limit])
      

      【讨论】:

      • 它似乎可以工作,但色标存在问题。很多时候,色标上端的最后一个值停止在 value=9,但在实际情况下,有许多值 > 9,在这种情况下,颜色条给出了误导性信息。有没有办法像这样在彩条(matplotlib.org/_images/colorbar_only.png)中创建一个三角形的东西,让读者有一些想法。
      【解决方案3】:

      如果您想绘制分布不均的数据,您可以将值缩放/标准化到 [0,1] 的范围内。

      range = max(data) - min(data);
      data = (data - min(data)) / range;
      

      如果要缩放到 [x,y] 的任何给定范围,请先标准化为 [0, 1],然后:

      range2 = y - x;
      data = (dataa * range2) + x;
      

      把它们放在一起:

      function normalized = normalize_var(array, x, y)
      
       % Normalize to [0, 1]:
       m = min(array);
       range = max(array) - m;
       array = (array - m) / range;
      
       % Then scale to [x,y]:
       range2 = y - x;
       normalized = (array*range2) + x;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-07-02
        • 2021-10-08
        • 1970-01-01
        • 2020-01-25
        • 2018-03-13
        • 1970-01-01
        相关资源
        最近更新 更多