Проблема здесь в том, что цветовая карта, которую вы пытаетесь имитировать, является нелинейной, но MATLAB отображает данные в цветовую карту линейным способом. Вы можете решить эту проблему, сначала связав данные с помощью histcounts
, чтобы создать линейное отображение, а затем отрегулировав метки для меток цвета , чтобы сделать вашу линейную карту цветов нелинейной. Вот пример:
data = 2.5.*rand(200); % Sample random data in the range [0 2.5]
edges = [0 0.5 0.75 0.9 1.1 1.25 1.5 2 2.5]; % Define edges of nonlinear map
imgMap = [0.00 0.00 0.50; ... % Colormap colors
0.00 0.50 1.00; ...
0.67 0.90 0.93; ...
1.00 1.00 1.00; ...
1.00 0.87 0.68; ...
0.98 0.67 0.38; ...
1.00 0.40 0.10; ...
1.00 0.00 0.00];
[~, ~, bin] = histcounts(data, edges); % Bin the data according to the edges
image(bin); % Plot bin index, not the original data
colormap(imgMap); % Add new colormap
hBar = colorbar; % Add color bar
set(hBar, 'TickLabels', ... % Modify color bar tick labels
[{''}; cellstr(num2str(edges(2:(end-1)).', '%g')); {''}]);
А вот пример графика:
Обратите внимание, что если ваши данные содержат значения NaN
, вы получите значение bin , равное 0, которое в приведенном выше примере будет сопоставлено с самым низким значением в карте цветов диапазон (который является первым элементом imgMap
). Чтобы восстановить эти значения NaN
, выполните следующие действия после объединения данных с histcounts
:
bin(bin == 0) = nan;