Отобразить цвета Matlab в виде вертикальных полос
Я наткнулся на это представление об обмене файлами, которое, учитывая положительное целое число, генерирует столько "максимально различимых" цветов. Инструмент работает отлично, но я хотел бы визуализировать цвета, которые он генерирует, с помощью цветных вертикальных полос. Пример взят из связанной статьи в блоге:
Для выбора цвета:
ans =
0 0 1.0000
1.0000 0 0
0 1.0000 0
0 0 0.1724
1.0000 0.1034 0.7241
1.0000 0.8276 0
0 0.3448 0
Мы получаем вертикальные полосы слева, которые показывают эти цвета.
3 ответа
Решение
Довольно простой способ будет следующим:
a = [ 0 0 1.0000 ;
1.0000 0 0 ;
0 1.0000 0 ;
0 0 0.1724 ;
1.0000 0.1034 0.7241 ;
1.0000 0.8276 0 ;
0 0.3448 0 ]
figure
imagesc(1:size(a, 1));
colormap(a);
% Optional, but neatens things up a bit
set(gca, 'clim', [0.5 (size(a, 1) + 0.5)]);
% Also optional, removes the ticks from the axes
set(gca, 'xtick', [], 'ytick', []);
выход:
Прямоугольники можно легко нарисовать с помощью команды rectangle()
:
z = [ 0 0 1.0000
1.0000 0 0
0 1.0000 0
0 0 0.1724
1.0000 0.1034 0.7241
1.0000 0.8276 0
0 0.3448 0];
h = 6; % Heigth rectangle
w = 1 % Width rectangle
n = size(z,1); % Colours in z
x = 1:w:w*n;
for ii = 1:n
rectangle('Position',[x(ii),0,w,h],'FaceColor',z(ii,:))
end
axis off;
Вот один из способов, используя низкий уровень patch
Функция для создания цветных полос:
c = [ 0 0 1.0000
1.0000 0 0
0 1.0000 0
0 0 0.1724
1.0000 0.1034 0.7241
1.0000 0.8276 0
0 0.3448 0];
n = size(c,1);
figure;
x = [0:n-1; 1:n; ...
1:n; 0:n-1];
y = [zeros(2, n); ones(2, n)];
patch('XData', x, 'YData', y, ...
'EdgeColor', 'none', ...
'FaceColor', 'flat', ...
'FaceVertexCData', c);
axis off;
Вы можете играть с x
а также y
значения для масштабирования ширины и высоты полос, если вы хотите изменить соотношение сторон.