【问题标题】:Matlab: Plot array such that each value has random shape and a color mapMatlab:绘制数组,使每个值具有随机形状和颜色图
【发布时间】:2019-08-27 03:38:03
【问题描述】:

在 Matlab 中:

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

我怎样才能给它从 x=1 处的值是最深的蓝色,x=10 是红色的方案中选择的颜色(即某种热图)?

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

谢谢!

【问题讨论】:

  • 假设运行时间会因为嵌套循环而过长并不一定是正确的。我会在声明之前对其进行测试。

标签: arrays matlab plot colors matlab-figure


【解决方案1】:

一、明码:

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 值,您只需要在这两者之间进行线性“插值”。改组标记类型由简单的rand 完成。 (当然,可以事先生成一些rand 大小为n 的向量。)我不完全确定,是否可以将所有这些都放在一个plot 命令中,但我非常怀疑。因此,使用循环是目前最简单的方法。

【讨论】:

  • 感谢您的良好响应,但我担心循环解决方案不够好,因为我有兴趣稍后在循环中绘制,在我操作数组中的值之后..如果你能帮我找到一个没有循环的解决方案,那就更好了:)
  • @user1611107 如果没有循环,您想要的似乎很难实现。为什么不想使用循环?您可以将其嵌套在其他循环下
  • @user1611107 您应该使用更多信息编辑您的问题,以便明确限制和问题
  • 我只是在运行一些代码来更改数组中每个位置的值,我正在寻找一种可视化的表示形式,它可以让我跟踪动态并用我的眼睛看到价值随着它的前身或少数几个前身而变得更大。我有数千个数组条目,并且我在一个循环中的每一步都进行了数千次的绘图,所以我不希望绘图过程过多地延迟其余代码。这只是为了保持运行时间短..但是如果没有循环就不可能,那么我会接受上面的答案
  • @user1611107:在 MATLAB 中搜索动画图。更新行对象的XDataYData 属性比每次更新行对象plot 更有效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-14
  • 1970-01-01
  • 2023-04-02
  • 2016-09-08
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
相关资源
最近更新 更多