2015-01-09 2 views
1

Я хочу, чтобы область перекрытия отображала цвет смешивания цветной (горячей) и цветовой схемы (круто).Как смешивать цвет другой цветовой карты в Matlab

Например,

contourf(peaks) 
colormap(hot) 
freezeColors 
hold on 
contourf(peaks') 
colormap(cool) 

Даже я настроить значение альфа для настройки прозрачности контура участка. Цвета по-прежнему не похожи на смесь двух разных цветов. Например, одно кольцо контура 1 заполняет синий цвет, а другое кольцо контура 2 заполняет красный цвет. В области перекрытия кольца контура 1 и контура 2 я хочу заполнить фиолетовый (красный + синий) цвет как на контуре 1, так и на контуре 2, а область с перекрытием по-прежнему сохраняет исходный цвет (синий или красный).

У кого-нибудь есть хорошие идеи?

Спасибо заранее!

+0

Пожалуйста, измените вопрос, чтобы объяснить * четко * то, что вы подразумеваете под «смесью два различной палитры», не ясно, на все – Dan

+0

Спасибо за ваш ответ! Я добавил пример, чтобы объяснить, что означает «смесь двух разных цветов». –

+0

['freezeColors'] (http: //uk.mathworks.com/matlabcentral/fileexchange/7943-freezecolors --- unreezecolors) является внешней функцией от центра Matlab. Он позволяет использовать различную цветовую палитру на одной и той же фигуре, но только на ** разных «осях» ** (другой подзаговор). Я не думаю, что есть способ использовать 2 цветовых карты на одной оси. Вы должны создать свой собственный _mixed_ colormap и смещать данные, чтобы каждый из них был проиндексирован только в той части цветовой карты, где они принадлежат. – Hoki

ответ

0

Я выяснил решение. Код отображается как удар.

im1 = double (пики (300));
im2 = double (пики (300) ');
im1_rgb = лето (im1);
im2_rgb = cool (im2);
[x, y] = meshgrid (1: размер (im1,2), 1: размер (im1,1));
data = im1_rgb/2 + im2_rgb/2;
подзаговор (1,3,1)
TColor (х, у, данные)
держать на [с, h1] = контура (х, у, IM1);
набор (h1, 'LineColor', 'b')
[c, h2] = контур (x, y, im2);
множество (h2, 'LineColor', 'к')
удержать
подзаговор (1,3,2)
TColor (х, у, im1_rgb)
провести на
[с, h1] = контур (х, у, im1);
множество (h1, 'LineColor', 'б')
удержать
подзаговор (1,3,3)
TColor (х, у, im2_rgb)
провести на
[с, h2] = контур (х, у, IM2);
множества (h2, «LineColor», «к»)
повременить

0

Редактировать: Я просто прочитал ваше редактирование, я не отвечаю, что вы хотели ... Я просто оставлю его здесь на всякий случай.

команда hold, которую вы используете, просто перезаписывает предыдущие точки (кроме того, цветовая палитра влияет на глобальные точки, поэтому она не будет работать в любом случае ...). Что вам нужно сделать, это создать новую цветовую палитру, которая является суммой ваших два старых цветовых карт, и это идет немного как это:

Map1=colormap(hot); 
Map2=colormap(cool); 
CustomMap=Map1/2+Map2/2; 
imshow(ImageWhatever) 
colormap(CustomMap) 

Надежда, которая ваты вы хотели!

+0

Спасибо за ваш ответ! Если два контура полностью перекрываются, он должен работать с использованием смешанной цветовой карты. Проблема, с которой я столкнулся, - частичный перекрываемый контурный график. Для перекрываемой области я хочу, чтобы она отображала смешанную цветовую палитру. Для других областей он должен содержать исходную цветовую палитру. –

Смежные вопросы