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

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的值是红色(即某种热图)的方案中选择颜色呢?

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

谢谢!

Han*_*rse 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;
Run Code Online (Sandbox Code Playgroud)

并且,输出:

输出量

大部分内容可以在plot命令的MATLAB帮助中的“ 指定线宽”,“标记大小”和“标记颜色”部分找到。色彩图只是n x 3RGB值在0到1之间的矩阵。因此,我将最暗的蓝色解释为[0 0 1],而将纯红色解释为[1 0 0]。现在,您只需要在这两个n值之间进行线性“插值”即可。改写标记类型是通过简单的rand。(当然,一个人可以事先生成一些rand具有大小的向量n。)我不确定,是否可以将所有这些向量放在一个plot命令中,但是我很怀疑。因此,使用循环是目前最简单的方法。