Контроль шкалы цветовой шкалы в MATLAB - PullRequest
0 голосов
/ 13 февраля 2019

Вопрос: Как указать цветовые переходы в пользовательской цветовой панели MATLAB?
В частности, Я бы хотел, чтобы желтый (см. Ниже) покрывал большую областьцветовая шкала (возможно, [19.5–21.5] или что-то похожее)

Используя этот ответ , я смог создать собственную цветовую панель в MATLAB.Я пытаюсь понять этот ответ , поскольку это может быть актуально

Я пробовал подходы из этого ответа и просмотрел этого ответа & этого ответа и не смог достичь своей цели.

Example plot w/ current colorbar and illustration of desired colorbar

Полный пример ниже (MATLAB R2017a)

% Data
X = [22.6 22.8 22.6 20.45 22.3 18.15 19.95 20.8]';
Y = [84 89 63 81 68 83 77 52]';
Z = [23.0 22.695 21.1450 21.5 22.09 20.5 22.075 20.915]';

% Create custom colormap  
% Reference: https://stackoverflow.com/questions/24488378/how-to-map-a-specific-value-into-rgb-color-code-in-matlab/24488819#24488819
col3 = [0 1 0]; %G
col2 = [1 1 0]; %Y
col1 = [1 0 0]; %R
n1 = 20; n2 = 20;
cmap=[linspace(col1(1),col2(1),n1);linspace(col1(2),col2(2),n1);linspace(col1(3),col2(3),n1)];
cmap(:,end+1:end+n2)=[linspace(col2(1),col3(1),n2);linspace(col2(2),col3(2),n2);linspace(col2(3),col3(3),n2)];
cmap = cmap';

% Plot
colormap(cmap), hold on, box on
p = scatter(X,Y,[],Z,'filled','DisplayName','Data3');
cb = colorbar;
cb.Limits = [18 23];
cb.Ticks = [18:1:23];

% Cosmetics
p.MarkerEdgeColor = 'k';
xlabel('X')
ylabel('Y')
cb.Label.String = 'Z';

1 Ответ

0 голосов
/ 13 февраля 2019

Я думаю, что все, что вам не хватает, это вызов caxis, чтобы указать минимальные и максимальные значения для сопоставления цветового диапазона:

caxis([18 23]);

enter image description here

Обратите внимание, что следующая строка ...

cb.Limits = [18 23];

... изменяет только пределы тика отображается на цветовой панели, но не меняет ничего о том, как данные отображаются в цветовом диапазоне.Функция caxis - это то, как вы управляете этим (в приведенном выше случае сопоставление значения 18 с одним концом и значения 23 с другим).По умолчанию ваш код отображал минимальное и максимальное значения в Z на цветовой диапазон (20,5 и 23 соответственно).Затем, когда вы устанавливаете лимиты тиков на цветовой шкале на больший диапазон, он просто заполняет его последним цветом на цветовой карте, в данном случае красным.Вот почему вы видите столько всего этого.

Бонус

Просто потому, что вас это может заинтересовать, вы также можете использовать интерполяцию с помощью функции interp1, чтобы легко сгенерироватьЦветная карта выглядит так:

cmap = interp1([1 0 0; 1 1 0; 0 1 0], linspace(1, 3, 41));
...