2013-04-15 117 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()的標籤不存在的圖像。 –