Размещение меток в центре - PullRequest
0 голосов
/ 17 января 2020

Я написал скрипт для конкретной c цветовой карты, приведенной ниже:

white=[1 1 1];
yellow=[1 1 0];
orange=[1 0.5 0];
red=[1 0 0];
black=[0 0 0];
custom_map = [white; yellow; orange; red; black]; 
colorbar('YTickLabel',{'None','Moderate','Strong','Severe','Extreme'})
caxis([1,5]);

Я бы хотел, чтобы метки для отметок были размещены в центре цветовой шкалы, т.е. для надписи «белый» будет размещен в середине белой секции цветовой шкалы. До сих пор у меня возникают трудности с достижением этого.

Есть ли простой способ сделать это?

1 Ответ

0 голосов
/ 17 января 2020

В комментариях под ответом на ваш предыдущий вопрос уже была подсказка Луиса. Поскольку правильное оформление цветовой панели немного сложнее, вот полный пример:

% Custom colormap
white = [1 1 1];
yellow = [1 1 0];
orange = [1 0.5 0];
red = [1 0 0];
black = [0 0 0];
custom_map = [white; yellow; orange; red; black]; 
n_colors = size(custom_map, 1);

% Generate and show sample data; apply custom colormap
a = rand(20, 20);
imagesc(a);
colormap(custom_map);

% Add styled colorbar
vmin = 0;
vmax = 1;
v_range = vmax - vmin;
ticks = v_range*(vmin+1/(2*n_colors)):v_range*(1/n_colors):vmax;
ticklabels = {'white', 'yellow', 'orange', 'red', 'black'};
colorbar('Ticks', ticks, 'TickLabels', ticklabels);
% Also works, and Octave compatible:
% colorbar('ytick', ticks, 'yticklabel', ticklabels);
caxis([vmin, vmax]);

Для правильного выравнивания тиков вы должны включить минимальное и максимальное значения желаемого диапазона значений (vmin и vmax в примере), а также сам диапазон (v_range) и количество цветов (n_colors).

Вот некоторые результаты (Octave 5.1.0, но также протестированы в MATLAB Online) :

Output

Реализация должна быть достаточно гибкой. Вот те же данные, но для другого vmax = 3:

Addon #1

Или вот те же данные с двумя дополнительными цветами:

Addon #2

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...