将 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;
产生这样的情节
如果您想更改纵横比,您可以使用 x
和 y
值来缩放条带的宽度和高度。
一个相当简单的方法如下:
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;
我偶然发现了这个 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;
产生这样的情节
如果您想更改纵横比,您可以使用 x
和 y
值来缩放条带的宽度和高度。
一个相当简单的方法如下:
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;