Постройте цвета 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

Мы получаем вертикальные полосы слева, которые показывают эти цвета.


person Alex    schedule 08.11.2015    source источник


Ответы (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', []);

выход:

введите описание изображения здесь

person zelanix    schedule 09.11.2015

Прямоугольники можно легко нарисовать с помощью команды 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;
person Dennis Klopfer    schedule 09.11.2015

Вот один из способов использования низкоуровневой функции 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, чтобы масштабировать ширину и высоту полос, если хотите изменить соотношение сторон.

person horchler    schedule 09.11.2015