matlab - 在不将人物置于前景的情况下绘制人物

标签 matlab matlab-figure

figure;
ax1 = axes;
figure;
ax2 = axes;
x = 0; y = 0;
while ishandle(ax1) && ishandle(ax2)
    x = x + 1;
    y = y + 1;
      figure(1)
      scatter(x,y, 'MarkerEdgeColor', 'red')
      hold on
      figure(2)
      scatter(x,y, 'MarkerEdgeColor', 'blue')
      hold on
  end

在我的脚本中,我有多个图形,它们将循环更新。必须在脚本运行时显示图形。不幸的是,当前更新的人物总是在前台弹出,这使得无法监视某个人物。我知道 figure(1)figure(2) 的调用会导致这种行为,但我如何绘制这些数字,而不将窗口置于前台?

最佳答案

正如 mikkola 在评论中建议的那样,您可以指定向哪些轴scatterplot 添加数据点。然而,有一个更好的方法:创建一个单行对象,并更新它的 xdataydata 属性。这既更快又更节省内存。您的代码将变为:

x = 0; y = 0;
figure;
h1 = plot(x,y,'ro');
figure;
h2 = plot(x,y,'bo');
while ishandle(h1) && ishandle(h2)
   x = x + 1;
   y = y + 1;
   h1.XData(end+1) = x;
   h1.YData(end+1) = y;
   h2.XData(end+1) = x;
   h2.YData(end+1) = y;
   drawnow
   pause(0.1)
end

在使用 MATLAB 处理图形时,我保留了一套经验法则。这些与这个问题相关:

  • figure 仅用于创建新图,或将现有图置于最前面(您通常希望避免这种情况,但有时是必要的)。

  • 始终通过保留和使用它们的句柄来指定要处理的图形或坐标轴。我从不依赖 gcfgca(既不明确也不隐含)。在命令行上键入时使用当前图形很有用,但在脚本或函数中,真正的危险是有人在执行函数时随机单击窗口。创建一个窗口然后写入 gcf 可能最终会写入一个不同的图形(真的,我总是点击随机的东西)。

  • 不要创建不必要的对象。为绘制的每个点创建一个新的line 对象是一种浪费。

另请注意,除非您为每个点指定不同的颜色或大小,否则 plot(...'o') 等同于 scatter(...)。但是使用点大小或颜色来指定附加信息并不是传达该信息的好方法。阅读Tufte's "The visual display of quantitative information"如果您有兴趣了解如何通过图表进行有效沟通。

关于matlab - 在不将人物置于前景的情况下绘制人物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48033731/

相关文章:

matlab - MATLAB 中的 imshow() 和 rgb2gray() 问题

matlab - 如何测量图像的二阶导数

matlab - 如何使 xTicks 适合所有绘图窗口?

带有 TEX 解释器的 Matlab 水平轴标记

matlab - 强制用户在 Matlab 中输入整数的最佳方法

具有不同整数长度的正则表达式

matlab - 使用Matlab对声音进行反卷积

matlab - 设置图形尺寸

java - 如何将Java swing黑色背景工具栏集成到polaxes中?

matlab - .fig 文件无法在 Matlab 中打开