【问题标题】:Plot Matlab colours as vertical bars将 Matlab 颜色绘制为竖线
【发布时间】:2015-11-08 23:08:15
【问题描述】:

我偶然发现了这个file exchange submission,给定一个正整数,它会生成许多“最大可区分”的颜色。该工具运行良好,但我想用彩色垂直带可视化它生成的颜色。一个示例,取自链接的博客文章:

颜色选择:

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

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

【问题讨论】:

    标签: matlab colors visualization lab-color-space


    【解决方案1】:

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

    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', []);
    

    输出:

    【讨论】:

      【解决方案2】:

      使用命令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;
      

      【讨论】:

        【解决方案3】:

        这是一种方法,使用低级 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 值来缩放条带的宽度和高度。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-10
          • 2020-09-26
          • 2012-11-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多