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
完成的。 (当然,可以事先生成一些大小为 n
的 rand
向量。)我不确定是否可以将所有这些放在一个 plot
命令中,但我我非常怀疑。因此,使用循环是目前最简单的方法。
在 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
完成的。 (当然,可以事先生成一些大小为 n
的 rand
向量。)我不确定是否可以将所有这些放在一个 plot
命令中,但我我非常怀疑。因此,使用循环是目前最简单的方法。