我尝试使用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
答案 0 :(得分:2)
这似乎是旧版本的MATLAB处理彩条的错误(HG2不存在)。 “正确”的行为是,如果当前轴中的任何对象使用缩放值,则颜色条应该尊重clims
。似乎MATLAB正在使用当前轴中的 first 子项来确定是否尊重clims
。 imshow
未使用缩放CDataMapping
,因此colorbar
只会忽略您的clims
。
看起来你有三个选择:
使用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)
在创建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)
将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)