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

问题描述 投票:0回答:1

在Matlab中:

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

我如何给它从一个方案中选择的颜色,其中x = 1的值是最暗的蓝色,而x = 10是红色的(即某种热图)?

这可以不使用循环吗?也许我应该为此目的用不同的功能取代“情节”(比如“分散”?我不知道......)?原因是我在另一个循环中绘制了这个,这个循环已经很长了,所以我有兴趣保持运行时间短。

谢谢!

arrays matlab plot colors matlab-figure
1个回答
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

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

© www.soinside.com 2019 - 2024. All rights reserved.