Matlab:绘制数组,使每个值都具有随机形状和颜色图

时间:2019-04-05 09:09:24

标签: arrays matlab plot colors matlab-figure

在Matlab中:

如何修改图(x,y,'o'),其中x = 1:10,y = ones(1,10),以使图中的每个点都具有随机形状?

我该如何从x = 1处的值是最暗的蓝色,x = 10处的红色(即某种热图)的方案中选择颜色呢?

可以在不使用循环的情况下完成此操作吗?也许我应该为此目的用其他功能替换“绘图”(例如“散布”?我不知道...)?原因是我将其绘制在另一个循环中,该循环已经很长了,因此我对保持运行时间短感兴趣。

谢谢!

1 个答案:

答案 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;

然后,输出:

Output

其中大多数内容可以在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命令中,但是我我非常怀疑。因此,使用循环是目前最简单的方法。