【问题标题】: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;
产生这样的情节
如果您想更改纵横比,您可以使用x 和y 值来缩放条带的宽度和高度。