2013-04-15 104 views
1

我在'jet'颜色表中有一些要点。这些点的系数可以从0到1,但通常它们不覆盖所有范围,例如0.75-0.9。如何设置颜色条标签

当我绘制这些点时,我会对它们进行着色,因此0.75是色彩图中的较小颜色,0.9是色彩图中的最大颜色,因此会显示所有色彩图。我想要做的是在颜色条中显示。当我绘制颜色条的时候,标签会变成64,但是我希望它们从0.75到0.9。我怎样才能做到这一点?

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

EDIT2

我发现为什么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 
+0

你试过CAXIS:http://www.mathworks.com/help/matlab /ref/caxis.html? – Dan

+0

@Dan humm ......我的理解是,caxis将颜色范围设置为所需的颜色范围。我已经有了。颜色被绘制为Iwant,但是在颜色条中颜色中的数字与我的数据的数量不一致,它们是从0-64而不是从最小到最大 –

+0

您是如何设置范围的?也许你应该尝试使用'caxis'来代替,因为我认为它可以同时对颜色条范围进行整理。我看了一下使用'caxis'的过去脚本,并且colorbar范围与我用'caxis'指定的范围相匹配。 – Dan

回答

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:/

+0

不,你的代码对我的结果没有任何改变:( –

+0

如果你单步执行代码,调用imshow之前调色板是否正确?还可以尝试最后一次调用颜色条到最后? – Dan

+0

如果你拿出你发布的代码的最后一个colourbar(),它就会起作用,我只是不知道为什么,它是唯一能够使它看起来像这样的代码的顺序,编辑你的答案并接受它。 –

1

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

下面是一个例子:

% 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); 
+0

对不起,但是相同。这是工作完美,没有'imshow()',但一旦显示colorbar()的标签不存在的图像。 –