подзаголовки с разными цветовыми картами 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)


EDIT: кажется, что документация неверна! Смотрите комментарии!

Используя второй аргумент функции карты цветов, можно назначить конкретную карту цветов определенному (под)графику или осям, если вы хотите назвать это так:

Ссылаясь на 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 Agold2121 Я только что понял, что это работает только для изображений (то есть матриц), проверьте ссылку, чтобы узнать, как это сделать с графиками. - person Cape Code; 12.11.2014
comment
@agold2121 freezeColors не решает вашу проблему? - person Cape Code; 12.11.2014
comment
Нет, на самом деле он замораживает одни и те же цвета для обоих сюжетов. - person agold2121; 12.11.2014