1

我在“喷气”颜色图中有一些要点。这些点的系数可以从 0 到 1,但通常它们不会覆盖所有范围,例如 0.75-0.9。

当我绘制这些点时,我为它们着色,因此 0.75 是颜色图中的较小颜色,而 0.9 是颜色图中的最大颜色,因此会显示所有颜色图。我想要做的就是在颜色栏中也显示出来。当我绘制颜色条时,它上面的标签变为 64,但我希望它们从 0.75 到 0.9。我怎样才能做到这一点?

编辑 我不认为代码本身有很大帮助,但它就在这里,以防万一。在colors变量中,我将 转换ZNCC为颜色图的范围。

编辑2

caxis我找到了不适合我的原因。这是代码:

%this is why it doesnt work
im=imread('someimageyouwanttotest_inRGB.png')
imshow(im)


points=[1, 2;1 , 2 ;0.3,0.7]
ZNCC=points(3,:)
cmap=colormap('jet');
colors=cmap(round(  ((1-min(ZNCC))+ZNCC-1).*(size(cmap,1)-1)/max((1-min(ZNCC))+ZNCC-1))+1,:  );
hold on
for i=1:length(ZNCC)

    plot(points(1,i),points(2,i),'.','Color',colors(i,:));  

end
colorbar()
hold off
4

2 回答 2

1

如果caxis不适合您,您可以存储返回colorbar- 它是颜色栏对象的句柄。然后你可以设置它的属性,比如'YTick''YLim'。您可以设置的完整属性列表与轴属性相同(因为颜色栏毕竟只是一个轴对象)。

这是一个例子:

% Generate some random data
z = rand(10);
[x, y] = meshgrid(1:size(z, 1));

% Plot colour map
pcolor(x, y, z);
shading interp; % Comment out to disable colour interpolation
colormap jet;

% Setup colorbar
c = colorbar();
set(c, 'YTick', [0.75 0.875 1]); % In this example, just use three ticks for illustation
ylim(c, [0.75 1]);

完成绘图后,只需执行一次。

编辑:如果您需要自动从数据中获取限制和刻度,那么您可以执行类似的操作

% Find the limits
lims = [min(z(:)) max(z(:))]; 

% Function for rounding to specified decimal places
dprnd = @(x, dps)round(x*(10.^dps))./(10.^dps);

% Generate ticks
nTicks = 5; 
nDps = 2;
ticks = dprnd(linspace(lims(1), lims(2), nTicks), nDps);

set(c, 'YTick', ticks);
于 2013-04-15T11:18:11.820 回答
1

我认为这是您的代码正确显示所有颜色,而不是先在没有图像的情况下设置颜色条:

points=[1, 2;1 , 2 ;0.3,0.7]
ZNCC=points(3,:)

cmap=colormap('jet');
caxis([min(ZNCC) max(ZNCC)]); 
colorbar();

hold on

%this is why it doesnt work
im=imread('someimageyouwanttotest_inRGB.png')
imshow(im)

colors=cmap(round(  ((1-min(ZNCC))+ZNCC-1).*(size(cmap,1)-1)/max((1-min(ZNCC))+ZNCC-1))+1,:  );

for i=1:length(ZNCC)

    plot(points(1,i),points(2,i),'.','Color',colors(i,:));  

end

hold off

我无法测试它,因为我没有imshow:/

于 2013-04-15T10:37:10.877 回答