подплотове с различни цветни карти matlab

Опитвам се да направя графика с два различни контурни подграфика, които използват напълно различни цветови карти. Въпреки това с кода, който имам в момента (който създава персонализирана цветова карта за един от подграфиците), подграфиците излизат с една и съща цветна карта. Някакви идеи как да поправя това?

h = figure;
subplot(2,1,1)
title('GEFS 20 Member Mean Vorticity');
axesm('eqdcylin','maplonlimit',[-180 179],'maplatlimit',[0 90]);
%eqdcylin
contourm(gLat, gLon, squeeze(meanhx(x,:,:))', 16,'Color',[0.05 0.05 0.05],'LineWidth',2);
hold on
contourfm(gLat, gLon, squeeze(vmeanx(x,:,:))', 30, 'LineStyle', 'none'); 
shading flat;
lm=worldlo('POline');
  for i=1:length(lm);
  lm(i).otherproperty = {'color','m','LineWidth',1.5};
  end
displaym(lm);
gridm on;
tightmap;
set(h, 'Position', [1 1 2200 1100]);
colormap(b2r(-5*10^-5, 5*10^-5));
freezeColors;
cbfreeze(colorbar)




%caxis([-5*10^-5 5*10^-5])

colorbar;


subplot(2,1,2)
title('GEFS 20 Member Vorticity Variance');
axesm('eqdcylin','maplonlimit',[-180 179],'maplatlimit',[0 90]);
%eqdcylin
contourm(gLat, gLon, squeeze(meanhx(x,:,:))', 16,'Color',[0.05 0.05 0.05],'LineWidth',2);
hold on
contourfm(gLat, gLon, squeeze(vvarx(x,:,:))', 30, 'LineStyle', 'none'); 
shading flat;
lm=worldlo('POline');
  for i=1:length(lm);
  lm(i).otherproperty = {'color','m','LineWidth',1.5};
  end 
displaym(lm);
gridm on;
tightmap;
set(h, 'Position', [1 1 2200 1100]);

mycmap = [
0.9961    0.9961    0.9961;
0.6641    0.6641    0.9974;
0.3320    0.3320    0.9987;
     0         0    1.0000;
     0    0.2500    1.0000;
     0    0.5000    1.0000;
     0    0.7500    1.0000;
     0    1.0000    1.0000;
0.2000    1.0000    0.8000;
0.4000    1.0000    0.6000;
0.6000    1.0000    0.4000;
0.8000    1.0000    0.2000;
1.0000    1.0000         0;
1.0000    0.9333         0;
1.0000    0.8667         0;
1.0000    0.8000         0;
1.0000    0.7333         0;
1.0000    0.6667         0;
1.0000    0.6000         0;
1.0000    0.5333         0;
1.0000    0.4667         0;
1.0000    0.4000         0;
1.0000    0.3333         0;
1.0000    0.2667         0;
1.0000    0.2000         0;
1.0000    0.1333         0;
1.0000    0.0667         0;
1.0000         0         0;
0.9854         0         0;
0.9708         0         0;
0.9561         0         0;
0.9415         0         0;
0.9269         0         0;
0.9123         0         0;
0.8977         0         0;
0.8830         0         0;
0.8684         0         0;
0.8538         0         0;
0.8392         0         0;
0.8246         0         0;
0.8099         0         0;
0.7953         0         0;
0.7807         0         0;
0.7661         0         0;
0.7515         0         0;
0.7368         0         0;
0.7222         0         0;
0.7092         0         0;
0.6961         0         0;
0.6830         0         0;
0.6699         0         0;
0.6569         0         0;
0.6438         0         0;
0.6307         0         0;
0.6176         0         0;
0.6046         0         0;
0.5915         0         0;
0.5784         0         0;
0.5654         0         0;
0.5523         0         0;
0.5392         0         0;
0.5261         0         0;
0.5131         0         0;
0.5000         0         0;
];

colormap(mycmap);






freezeColors;
cbfreeze(colorbar);


set(gcf, 'renderer', 'zbuffer');

person agold2121    schedule 12.11.2014    source източник
comment
не е минимален, нито възпроизводим; прегледахте ли примерите в freezeColors?   -  person rozsasarpi    schedule 12.11.2014
comment
Разбира се, как мога да направя това минимално и възпроизводимо.   -  person agold2121    schedule 12.11.2014
comment
Това е свързано с R, но е еднакво валидно за Matlab и всеки въпрос относно програмирането. Търсенето в Google ще ви даде стотици попадения. Освен това разгледайте помощ на SO.   -  person rozsasarpi    schedule 12.11.2014
comment
Многократно търсих в Google и продължавам да се връщам със същия проблем, тъй като изглежда няма решение, което директно да решава този проблем. Иначе нямаше да питам тук. Освен това не съм сигурен какво точно прави това невъзпроизводимо, тук няма нищо, което да не е възпроизводимо, а кодът е просто претрупан (с картографски линии) контурен график.   -  person agold2121    schedule 12.11.2014
comment
Не е толкова лесно за решаване, вижте тук за решение: stackoverflow.com/a/39741044/2627163 и ако можете да направите самостоятелен код, който мога да стартирам, ще добавя 2 цветни карти към него.   -  person EBH    schedule 06.11.2016


Отговори (3)


РЕДАКТИРАНЕ: изглежда, че документацията е грешна! Вижте коментарите!

Чрез използването на втория аргумент на функцията colormap, трябва да можете да присвоите конкретна цветова карта на конкретен (под-) график или оси, ако искате да го наречете така:

Позовавайки се на TMW: цветна карта:

Имайте предвид, че първият аргумент е дръжката на осите!

colormap(ax,map)

задава цветовата карта за осите, посочени от ax. Всяка ос във фигура може да има уникална цветова карта. След като зададете цветова карта на осите, промяната на цветовата карта на фигурата не засяга осите.

Как да получите дръжката на осите?:

когато чертаете с plot(x,y..), вие го получавате като върната стойност. Хвани го с:

ax = plot(x,y..)

За други парцел-функции, както изглежда използвате, трябва да намерите малко информация за това в доку.

person Lucius II.    schedule 13.11.2014
comment
това е грешно. Въпросът е за множество цветни карти в подзапис. Горното работи само когато всеки график е на различна фигура. Дори ако получите манипулатора на оста за единичен подграф, настройката на неговата цветова карта ще промени цветовата карта на всички останали оси във фигурата. - person carandraug; 26.08.2015
comment
Боже, изглежда си прав. Току-що получих тази форма на документацията. Обърках ли това?-› Всяка ос във фигура може да има уникална цветова карта или нещо не е наред с документацията..? :о - person Lucius II.; 27.08.2015
comment
явно да. Много е лесно да се тества, data = randi (64, 10); hax1 = subplot (1, 2, 1); image (data); colormap (hax1, jet); hax2 = subplot (1, 2, 2); image (data); colormap (hax2, hot); решението на Mathwork за това е абсолютна шега. Трябва да създадете цветова карта, която е конкатенацията на всяка цветна карта на подплот и съответно да коригирате стойностите на всяка. И ако искате цветни ленти, трябва да зададете техните диапазони също ръчно. - person carandraug; 27.08.2015

Ако надстроите до MATLAB 2017a, можете да присвоите цветова карта на всеки обект на оси, като използвате синтаксиса colormap(axesHandle, cMap)

person user2831602    schedule 21.04.2017

Ако имате кутията с инструменти за обработка на изображения, можете да използвате функцията subimage за показване на изображения със съответните им цветови карти:

X1=imread('http://upload.wikimedia.org/wikipedia/commons/5/5c/Burosch_Blue-Only_Test_pattern.jpg');
X2=imread('http://upload.wikimedia.org/wikipedia/commons/e/ea/Romsey_River_Test.jpg');
subplot(1,2,1), subimage(X1)
subplot(1,2,2), subimage(X2)

Резултат:

две изображения в една фигура

Редактиране има по-пълен отговор на този въпрос тук.

person Cape Code    schedule 12.11.2014
comment
Все пак не зареждам изображения, а изчислявам контурни графики. Ще работи ли това по подобен начин? - person agold2121; 12.11.2014
comment
@agold2121 Току-що разбрах, че работи само за изображения (т.е. матрици), проверете връзката за начини да го направите с графики. - person Cape Code; 12.11.2014
comment
@agold2121 freezeColors не решава проблема ви? - person Cape Code; 12.11.2014
comment
Не, всъщност замразява едни и същи цветове и на двата подграфика. - person agold2121; 12.11.2014