Как установить метки цветовой полосы

У меня есть несколько точек в цветовой карте "jet". Баллы имеют коэффициент, который может варьироваться от 0 до 1, но обычно они не охватывают весь диапазон, например, 0,75-0,9.

Когда я рисую эти точки, я окрашиваю их так, что 0,75 — это меньший цвет в палитре, а 0,9 — максимальный цвет в палитре, поэтому отображается вся палитра. Что я хочу сделать, так это показать это и на цветовой полосе. Когда я рисую цветную полосу, метки на ней достигают 64, но я хочу, чтобы они были от 0,75 до 0,9. Как я могу это сделать?

EDIT Я не думаю, что сам код сильно помогает, но вот, на всякий случай. В переменной 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

person Ander Biguri    schedule 15.04.2013    source источник
comment
@Dan Humm ... я понимаю, что caxis устанавливает желаемый диапазон цветов. У меня это уже есть. Цвета нанесены как Iwant, но в цветовой шкале цифры в цветах не соответствуют номерам моих данных, они от 0-64 вместо от min до max   -  person Ander Biguri    schedule 15.04.2013
comment
Как вы установили диапазон? Возможно, вам следует попробовать использовать вместо этого caxis, потому что я думаю, что это одновременно отсортирует диапазон цветовых полос. Я просмотрел свой прошлый скрипт, который использовал caxis, и диапазон цветовой шкалы соответствует тому, что я указал с помощью caxis.   -  person Dan    schedule 15.04.2013
comment
@Dan Дэн, я ничего не смог добиться с помощью caxis. Он просто построил все в этом диапазоне, но нормализовал. Так что все мои точки были синими.   -  person Ander Biguri    schedule 15.04.2013
comment
Я не могу больше комментировать, не видя кода. Но если ответ ниже правильный, то я не думаю, что все равно понял ваш вопрос.   -  person Dan    schedule 15.04.2013
comment
@OlegKomarov Уже нет!   -  person Ander Biguri    schedule 15.04.2013
comment
@OlegKomarov Вот пример ввода, но это было несложно. :D   -  person Ander Biguri    schedule 15.04.2013
comment
caxis([min(ZNCC) max(ZNCC)]); colorbar(); должно помочь   -  person Tobold    schedule 15.04.2013
comment
@Tobold, это странно.... С опубликованными данными это работает, но не работает с моим огромным объемом данных. Я отредактирую вопрос с дополнительной информацией, но я запутался   -  person Ander Biguri    schedule 15.04.2013
comment
@ Дэн Я понял, почему у меня не работает caxis. Я наношу точки на изображение. Просто изменив это, caxis не устанавливает цветовую полосу. Любые подсказки?   -  person Ander Biguri    schedule 15.04.2013
comment
@Tobold Это не работает. я отредактировал свой вопрос   -  person Ander Biguri    schedule 15.04.2013


Ответы (2)


Я думаю, что ваш код правильно отображает все ваши цвета, а не просто сначала настройте цветовую полосу без изображения:

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

person Dan    schedule 15.04.2013
comment
Нет, результат вашего кода не изменился на мой :( - person Ander Biguri; 15.04.2013
comment
Если вы пройдете код, будет ли цветовая полоса правильной до того, как вы вызовете imshow? Также попробуйте оставить последний вызов colorbar в конце? - person Dan; 15.04.2013
comment
Это работает, если вы уберете последний colorbar() кода, который вы разместили. Я просто не знаю, почему. Кажется, это единственный порядок кода, который заставляет это работать. Я отредактирую ваш ответ и приму его. - person Ander Biguri; 15.04.2013
comment
Тогда я предполагаю, что вызов imshow сбрасывает цветовую полосу, а затем вызов цветовой полосы в конце вызывает эту новую цветовую полосу сброса: / рад, что изменение порядка сработало! - person Dan; 15.04.2013

Если caxis у вас не работает, вы можете сохранить возврат от colorbar - это дескриптор объекта 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);
person wakjah    schedule 15.04.2013
comment
Извините, но так же. Это отлично работает без imshow(), но после отображения изображения метки colorbar() отсутствуют. - person Ander Biguri; 15.04.2013