显示图像时,颜色条限制不考虑轴的爬升

时间:2017-01-13 16:27:45

标签: matlab matlab-figure

我尝试使用trimesh在图片imshow上叠加hold on - 图。这到目前为止工作正常。我还想显示一个colorbar,它也有效,但不幸的是它没有调整到caxis指定的范围,有没有人知道如何解决这个问题?

这是一个示例输出:colourbar 应显示从1到z的范围,而不是0到60.如果我们删除imshow,一切正常。< / p>

这是我的MCVE

clc;clf;clear
T = [1,2,3;3,1,4]; % triangulation
X = [0,1,1,0]*300; % grid coordinates
Y = [0,0,1,1]*300;
for z = 2:20;
    clf;
    imshow(imread('board.tif')) % plot image (this is a built in matlab test image)
    hold on
    Z = [1,1,1,z];
    trisurf(T,X,Y,Z)            % superimpose plot 
    colormap hot
    caxis([1,z])
    colorbar
    drawnow
    pause(0.5)
end

1 个答案:

答案 0 :(得分:2)

这似乎是旧版本的MATLAB处理彩条的错误(HG2不存在)。 “正确”的行为是,如果当前轴中的任何对象使用缩放值,则颜色条应该尊重clims。似乎MATLAB正在使用当前轴中的 first 子项来确定是否尊重climsimshow未使用缩放CDataMapping,因此colorbar只会忽略您的clims

看起来你有三个选择:

  1. 使用imagesc而不是imshow

    clf;
    imagesc(imread('board.tif'));
    axis image
    hold on
    Z = [1,1,1,z];
    trisurf(T,X,Y,Z)            % superimpose plot
    colormap hot
    caxis([1,z])
    drawnow
    colorbar
    drawnow
    pause(0.5)
    
  2. 在创建imshow对象后调用trisurf

    clf;
    hold on
    Z = [1,1,1,z];
    trisurf(T,X,Y,Z)            % superimpose plot
    colormap hot
    him = imshow(imread('board.tif'));
    caxis([1,z])
    drawnow
    colorbar
    drawnow
    pause(0.5)
    
  3. image对象的CDataMapping属性设置为'scaled'(显示图片时会被忽略,因为它是RGB,但它会允许colorbar功能正常)

    clf;
    him = imshow(imread('board.tif'));
    set(him, 'CDataMapping', 'scaled')
    hold on
    Z = [1,1,1,z];
    trisurf(T,X,Y,Z)            % superimpose plot
    colormap hot
    caxis([1,z])
    drawnow
    colorbar
    drawnow
    pause(0.5)