Matlab предоставил код для функции newclim, которая четко решает эту проблему путем объединения цветовых карт в одну цветовую карту. Я мог найти эту документацию только в справке 2012b, но не в сети.
Обратите внимание, что оси, используемые для обновления CLim в качестве последнего шага, могут быть осями для просмотра графиков, как я применил этот код.
Расчет пределов цвета
Ключом к этому примеру является вычисление значений для CLim, которые заставляют каждую поверхность использовать раздел цветовой карты, содержащий соответствующие цвета.
Чтобы вычислить новые значения для CLim, вам нужно знать
Общая длина карты цветов (CmLength)
Начальный слот цветовой карты для использования для каждой оси (BeginSlot)
Конечный слот карты цветов для использования для каждой оси (EndSlot)
Минимальное и максимальное значения CData графических объектов, содержащихся
в осях. То есть по значениям оси CLim свойство определено
MATLAB, когда CLimMode установлен автоматически (CDmin и CDmax).
Сначала определите области вспомогательных участков и нанесите на поверхность поверхности.
im1 = load('cape.mat');
im2 = load('flujet.mat');
ax1 = subplot(1,2,1);
imagesc(im1.X)
axis(ax1,'image')
ax2 = subplot(1,2,2);
imagesc(im2.X)
axis(ax2,'image')
Объединение двух цветовых карт и установка новой цветовой карты.
colormap([im1.map;im2.map])
Получите данные, необходимые для расчета новых значений для CLim.
CmLength = length(colormap); % Colormap length
BeginSlot1 = 1; % Beginning slot
EndSlot1 = length(im1.map); % Ending slot
BeginSlot2 = EndSlot1 + 1;
EndSlot2 = CmLength;
CLim1 = get(ax1,'CLim'); % CLim values for each axis
CLim2 = get(ax2,'CLim');
Определение функции для вычисления значений CLim
Вычисление новых значений для CLim включает определение части цветовой карты, которую вы хотите использовать для каждой оси, относительно общего размера цветовой карты и соответственно масштабирование ее диапазона Clim. Вы можете определить функцию MATLAB для этого.
function CLim = newclim(BeginSlot,EndSlot,CDmin,CDmax,CmLength)
% Convert slot number and range
% to percent of colormap
PBeginSlot = (BeginSlot - 1) / (CmLength - 1);
PEndSlot = (EndSlot - 1) / (CmLength - 1);
PCmRange = PEndSlot - PBeginSlot;
% Determine range and min and max
% of new CLim values
DataRange = CDmax - CDmin;
ClimRange = DataRange / PCmRange;
NewCmin = CDmin - (PBeginSlot * ClimRange);
NewCmax = CDmax + (1 - PEndSlot) * ClimRange;
CLim = [NewCmin,NewCmax];
end
Входные аргументы указаны в маркированном списке выше. Функция сначала вычисляет процент от общей цветовой карты, которую вы хотите использовать для определенных осей (PCmRange), а затем вычисляет диапазон CLim, необходимый для использования этой части цветовой карты, учитывая диапазон CData в осях. Наконец, он определяет минимальные и максимальные значения, необходимые для рассчитанного диапазона CLim, и возвращает эти значения. Эти значения являются цветовыми пределами для заданных осей.
Использование функции
Используйте функцию newclim, чтобы установить значения CLim для каждой оси. Заявление
set(ax1,'CLim',newclim(BeginSlot1,EndSlot1,CLim1(1),...
CLim1(2),CmLength))
устанавливает значения CLim для первых осей, чтобы поверхность использовала цветовые интервалы от 65 до 120. Освещенная поверхность использует нижние 64 слота. Вам также необходимо сбросить значения CLim.
set(ax2,'CLim',newclim(BeginSlot2,EndSlot2,CLim2(1),...
CLim2(2),CmLength))
Как работает функция
MATLAB позволяет указывать любые значения для свойства CLim для осей, даже если эти значения не соответствуют CData графических объектов, отображаемых на осях. Минимальное значение CLim всегда отображается на первый цвет в цветовой карте, а максимальное значение CLim всегда отображается на последний цвет в цветовой карте, независимо от того, существуют ли на самом деле какие-либо значения CData, соответствующие этим цветам. Поэтому, если вы задаете значения для CLim, которые выходят за пределы фактического минимума или максимума CData объекта, MATLAB окрашивает объект только подмножеством цветовой карты.
Функция newclim вычисляет значения для CLim, которые отображают фактические значения CData графического объекта в указанные вами начальные и конечные слоты цветовой карты. Это достигается путем определения «виртуального» графического объекта, имеющего вычисленные значения CLim.