在Matlab中:
如何修改图(x,y,'o'),其中x = 1:10,y = ones(1,10),以使图中的每个点都具有随机形状?
我该如何从x = 1处的值是最暗的蓝色,x = 10处的红色(即某种热图)的方案中选择颜色呢?
可以在不使用循环的情况下完成此操作吗?也许我应该为此目的用其他功能替换“绘图”(例如“散布”?我不知道...)?原因是我将其绘制在另一个循环中,该循环已经很长了,因此我对保持运行时间短感兴趣。
谢谢!
答案 0 :(得分:5)
首先是普通代码:
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;
然后,输出:
其中大多数内容可以在Specify Line Width, Marker Size, and Marker Color部分的plot
命令的MATLAB帮助中找到。色彩图只是简单的n x 3
矩阵,RGB值在0到1之间。因此,我将最暗的蓝色解释为[0 0 1]
,而纯红色是[1 0 0]
。现在,您只需要在n
值的这两个值之间进行线性“插值”。通过简单的rand
来完成标记类型的改组。 (当然,可以事先生成一个rand
,大小为n
的{{1}}向量。)我不确定,是否可以将所有这些合并在一个plot
命令中,但是我我非常怀疑。因此,使用循环是目前最简单的方法。