【问题标题】:Heatmap log colour scale: caxis() doesn't map values correctly热图日志色标:caxis() 未正确映射值
【发布时间】:2022-01-08 06:40:44
【问题描述】:

我有一个二维数组,其中包含来自[1e-5, 1e5] 的对数分布值。由于各种原因,我想更改超出此范围的限制的颜色条。我使用 caxis 执行此操作,例如caxis([a,b]),其中ab 是所需的指数。但是,生成的颜色条无法正确映射。

示例问题,从日志分布值和[1e-5, 1e5] 的期望限制开始:

% Create log values and generate heatmap
dim = 10;
x = logspace(-5,5,dim);
values = repmat(x,[dim,1]);
hm = heatmap(values);

% Make visually clearer
hm.GridVisible = 'off';
colormap default
ax1 = gca;
ax1.XDisplayLabels = nan(length(ax1.XDisplayData),1);
ax1.YDisplayLabels = nan(length(ax1.YDisplayData),1);

% Colour bar scaling - PROBLEM
set(gca,'ColorScaling','log') % Log scale
caxis([-5,5]) % Lower/Upper limits (exponents) (to change!)
ax2 = struct(gca);
cb = ax2.Colorbar;
cb.Ticks = [1e0,1e1,1e2,1e3,1e4,1e5]; % Example ticks to show problem...

指定限制后,颜色映射会出现倾斜。如果您在 set 行之后暂停代码,caxis 的值将给出 [-11.5, 11.5],而不是 [-5, 5]。因此,如果我想要一个固定的颜色范围,例如[1e-7, 1e7],我显然需要捏造这些值。这是怎么回事? caxis 是否没有以应有的方式定义指数?

【问题讨论】:

    标签: matlab heatmap matlab-figure colorbar


    【解决方案1】:

    通过 MATLAB Central 上的帮助解决了答案。我期待caxis() 期望以 10 为底的指数,但它当然期望自然对数指数。因此,对于给定的颜色条范围[a,b],我只需要输入:

    caxis(log([a,b]))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      • 2017-12-02
      • 2020-08-02
      • 1970-01-01
      • 2019-08-17
      • 2020-01-08
      • 1970-01-01
      相关资源
      最近更新 更多