Цветовой контур отличается от pcolor

Я использую pcolor вместе с контурными линиями. Однако значение линий невозможно определить по графику, как это видно на следующем рисунке.

[x y data] = peaks(1000);
data = data / max(max(data));

colorDepth = 1000;
colormap(jet(colorDepth));

hold on;
pcolor(x,y,data); shading flat

[C,hfigc] = contour(x, y, data,[0:0.1:1]);
set(hfigc, ...
    'LineWidth',1.0, ...
    'Color', [1 1 1]);
hold off;
hcb = colorbar('location','EastOutside');

введите описание изображения здесь

Я бы предпочел, чтобы pcolor был в оттенках серого, а контурные линии - в цветах. Однако тогда мне нужна легенда для контурных линий.

РЕДАКТИРОВАТЬ: он работает как-то путем объединения двух цветовых карт, но затем цветовая шкала показывает оба, а это не то, что я хочу. Я бы предпочел иметь цветовую панель, которая включает те же контурные линии, что и график.

[x y data] = peaks(1000);
data = data - min(min(data));
data = data / max(max(data));

colorDepth = 1000;

hold on;
caxis([-1 1]);
colormap([gray(colorDepth); jet(colorDepth)]);
hplot = pcolor(x,y,data); shading flat        

[C,hfigc] = contour(x, y, data-1,[-1:0.1:0]);
set(hfigc, 'LineWidth',1.0);
% set(hfigc, 'Color', [1 1 1]);

hold off;
hcb = colorbar('location','EastOutside');

РЕДАКТИРОВАТЬ: цветовую шкалу можно исправить с помощью

set(hcb, 'Ylim', [0 1]);

введите описание изображения здесь


person Matthias Pospiech    schedule 15.02.2012    source источник
comment
В вашем коде отсутствует определение для zlevs (и есть небольшая опечатка)   -  person Itamar Katz    schedule 15.02.2012
comment
Я исправил опечатку. Но любой малейший намек на то, как раскрасить контур, отличный от сюжета, был бы полезен.   -  person Matthias Pospiech    schedule 16.02.2012
comment
@MatthiasPospiech: палитра цветов - это на самом деле оси. Вы можете изменить любые его свойства, такие как пределы x / y, пределы цвета, положение и т. Д. Вы также можете имитировать цветовую полосу или добавить дополнительную цветовую полосу, создав ее как отдельный график pcolor / imagesc.   -  person yuk    schedule 16.02.2012
comment
@yuk: как мне получить оси шкалы палитры, или вообще как получить дескриптор оси любого сюжета?   -  person Matthias Pospiech    schedule 17.02.2012
comment
Он у вас уже есть. Это hcb. Так можно сделать, например: set(hcb,'ylim',[0 1]). Ручка для текущих осей - gca. В общем, посмотрите документ графической функции, которую вы используете, обычно она может возвращать дескриптор осей.   -  person yuk    schedule 17.02.2012


Ответы (1)


Помимо решения, уже представленного в вопросе, можно использовать инструменты freezeColors и утилиты COLORMAP и COLORBAR, чтобы изменить цветовую карту в виде одного рисунка.

addpath('cm_and_cb_utilities');
addpath('freezeColors');

figure(1); clf;
[x y data] = peaks(1000);
data = data - min(min(data));
data = data / max(max(data));

colorDepth = 1000;

hold on;
caxis([0 1]);
colormap(jet(colorDepth));
hplot = pcolor(x,y,data); shading flat        

hcb = colorbar('location','EastOutside');
set(hcb, 'Ylim', [0 1]);
cbfreeze;

freezeColors;

colormap(gray(colorDepth));
[C,hfigc] = contour(x, y, data,[0:0.1:1]);
set(hfigc, 'LineWidth',1.0);

hold off;

введите описание изображения здесь

person Matthias Pospiech    schedule 16.02.2012
comment
У меня проблема с использованием cbfreez. Я пытаюсь использовать здесь ваш распорядок и получил эту ошибку ??? Ошибка при использовании == ›цветовой карты в 56 Первый аргумент должен быть дескриптором скалярных осей. Ошибка в == ›cbfreeze на 332 cmap = colormap (рис); Ошибка в == ›testcolorbar при 18 cbfreeze; - person user1331843; 20.06.2014