2016-03-16 5 views
1
Colorbar

Моей матрица содержит дискретные значения 1, 2 и 3, который (в данном случае) являются кодами для red, green и blue. Цветная панель показывает эти метки в позициях, где я изначально не ожидал, что они будут. Я предполагаю, что это связано с тем, что присвоены цвета (например, 2.4 не green, а blue), который не принимает дискретных значений.MATLAB/октав: Регулировка положения тика/выравнивания по оси

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

Пример:

% set gnuplot as graphics toolkit, set custum colormap and create exemplary matrix 
graphics_toolkit('gnuplot'); 
colormap([1 0 0; 0 1 0; 0 0 1]); 
A = randi([1 3], 5, 5); 

% plot with standard settings 
subplot (2, 1, 1); 
imagesc(A); 
caxis([1 3]); 
mycb = colorbar(); 
set(mycb, 'YTick', [1 2 3], 'YTickLabel', {'red', 'green', 'blue'}); 

% plot with adjusted tick positions (the way I want the colorbar to look like) 
subplot (2, 1, 2); 
imagesc(A); 
caxis([1 3]); 
mycb = colorbar(); 
set(mycb, 'YTick', [4/3 2 8/3], 'YTickLabel', {'red', 'green', 'blue'}); 

enter image description here

ответ

1

Насколько мне известно, нет поддержки цветовых карт, которые поддерживают только целочисленную арифметику. Лучшее, что вы можете сделать, это обобщить математику:

% calculate the points where the colour segments start/end 
b = linspace(1,n,n+1); 
% calculate the centers; 
c = mean([b(1:end-1);b(2:end)]); 

Что при п = 3 (три цвета) вычисляет позиции, которые вы использовали выше.

Смежные вопросы