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

Matlab: Plot array such that each value has random shape and a color map

在 Matlab 中:

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

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

这可以不使用循环来完成吗?也许我应该为此目的用不同的函数替换 "plot"(比如 "scatter"?我不知道...)?原因是我在另一个循环中绘制它,这个循环已经很长了,所以我有兴趣保持 运行 时间短。

谢谢!

一、明码:

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 命令的 MATLAB 帮助中的 Specify Line Width, Marker Size, and Marker Color 部分找到。颜色图只是 n x 3 RGB 值范围为 0 到 1 的矩阵。因此,我将 最深的蓝色 解释为 [0 0 1],而纯红色是 [1 0 0].现在,对于 n 值,您只需要在这两个值之间有一个线性 "interpolation"。打乱标记类型是通过简单的 rand 完成的。 (当然,可以事先生成一些大小为 nrand 向量。)我不确定是否可以将所有这些放在一个 plot 命令中,但我我非常怀疑。因此,使用循环是目前最简单的方法。