将 Matlab 颜色绘制为垂直条

Plot Matlab colours as vertical bars

我偶然发现了这个 file exchange submission,给定一个正整数,它会生成那么多 "maximally distinguishable" 颜色。该工具运行良好,但我想用彩色垂直带可视化它生成的颜色。一个示例,摘自链接的博客文章:

对于颜色的选择:

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

我们在左侧获得了显示这些颜色的垂直条带。

这是一种方法,使用低级 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;

产生这样的情节

如果您想更改纵横比,您可以使用 xy 值来缩放条带的宽度和高度。

一个相当简单的方法如下:

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;