use*_*107 0 arrays matlab plot colors matlab-figure
在Matlab中:
如何修改plot(x,y,'o'),其中x = 1:10且y = ones(1,10),以使图中的每个点都具有随机形状?
以及如何从x = 1的值是最暗的蓝色,x = 10的值是红色(即某种热图)的方案中选择颜色呢?
不用循环就可以做到吗?也许为此我应该用其他功能替换“绘图”(例如“散布”?我不知道...)?原因是我将其绘制在另一个循环中,该循环已经很长了,因此我对保持运行时间短感兴趣。
谢谢!
首先,普通代码:
x = 1:20;
nx = numel(x);
y = ones(1, nx);
% Color map
cm = [linspace(0, 1, nx).' zeros(nx, 1) linspace(1, 0, nx).'];
% Possible markers
m = 'o+*.xsd^vph<>';
nm = numel(m);
figure(1);
hold on;
for k = 1:nx
plot(x(k), y(k), ...
'MarkerSize', 12, ...
'Marker', m(ceil(nm * (rand()))), ...
'MarkerFaceColor', cm(k, :), ...
'MarkerEdgeColor', cm(k, :) ...
);
end
hold off;
Run Code Online (Sandbox Code Playgroud)
并且,输出:
大部分内容可以在plot命令的MATLAB帮助中的“ 指定线宽”,“标记大小”和“标记颜色”部分找到。色彩图只是n x 3RGB值在0到1之间的矩阵。因此,我将最暗的蓝色解释为[0 0 1],而将纯红色解释为[1 0 0]。现在,您只需要在这两个n值之间进行线性“插值”即可。改写标记类型是通过简单的rand。(当然,一个人可以事先生成一些rand具有大小的向量n。)我不确定,是否可以将所有这些向量放在一个plot命令中,但是我很怀疑。因此,使用循环是目前最简单的方法。