在Matlab中:
如何修改绘图(x,y,'o'),其中x = 1:10且y = 1(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;
并且,输出:
其中大部分内容可以在plot
部分的Specify Line Width, Marker Size, and Marker Color命令的MATLAB帮助中找到。色图是简单的n x 3
矩阵,RGB值范围从0到1.因此,我将最暗的蓝色解释为[0 0 1]
,而普通的红色是[1 0 0]
。现在,你需要在n
值的两者之间进行线性“插值”。通过简单的rand
来改变标记类型。 (当然,人们可以预先生成一些大小为rand
的n
矢量。)我不完全确定,如果可以将所有这些放在一个单独的plot
命令中,但我非常怀疑。因此,使用循环是最简单的方法。