在 Matlab 中禁用绘图

Posted

技术标签:

【中文标题】在 Matlab 中禁用绘图【英文标题】:Disable plots in Matlab 【发布时间】:2012-04-25 03:44:40 【问题描述】:

我有一些用 Matlab 编写的程序,由于某些原因(调试、使用不同输入进行测试等),我需要运行多次。

但是,程序及其各种功能绘制的图形很多,因此每次运行程序时,我都必须等待显示所有图形,这非常烦人且耗时(尤其是当您使用小型笔记本电脑时)。 程序执行后,我用close all关闭它们。

所以我的问题是:

有没有办法禁用 Matlab 中的所有绘图/图形/图形?要么在选项中,要么通过执行特定代码(如 disable plotenable plot)来确保没有图形正在显示。

我知道我可以浏览代码并注释绘图部分,但我不想忘记取消注释。

【问题讨论】:

【参考方案1】:

您可以使用以下命令从命令行运行 matlab:

matlab -nojvm

但是你根本没有得到 GUI。或者,您可以编写一个文件“plot.m”:

function h = plot(varargin)
  h = [];
end

什么都不做。如果它位于工作目录中(或路径顶部附近的其他位置),则 plot 将调用您的函数而不是“真实”图。您需要从您调用的任何其他图形函数中执行相同的操作。

我所知道的“关闭绘图”最接近的方法是一个包含此类函数的文件夹,您可以将其添加到路径以禁用绘图,并删除以启用。

【讨论】:

+1 创意解决方案,即使它很糟糕(故意遮蔽 MATLAB 内置函数?) 是的,甚至更糟,因为我最近责备某人给出的答案会make Doug Hull cry【参考方案2】:

试试这两个命令的组合:

set(gcf,'Visible','off')              % turns current figure "off"
set(0,'DefaultFigureVisible','off');  % all subsequent figures "off"

第二个,如果你把它放在程序的开头附近,可能会为你解决问题。当然,它仍在创建绘图,这对于计算时间和/或 RAM 问题可能是不可取的。

这是尽可能避免使用 Matlab 的经典原因。它助长了糟糕的编程设计。为了正确解决这个问题,您应该创建一些东西,让您在程序的***别“翻转开关”并控制绘图是否显示。也许它甚至具有显示/不显示选项的渐变,因此您可以根据正在运行的诊断选择不同类型的显示/不显示的图。

理想情况下,您希望这个“翻转开关”创建是一个可以访问其他对象的可见性和绘图功能的类。但由于在 Matlab 中交互式面向对象非常繁琐,因此开发这样的解决方案通常不值得付出努力,而且大多数人从项目一开始就没有考虑到这个设计方面。

Matlab 会鼓励人们通过制作诸如“isPlotVisible”之类的标志变量并创建始终接受此类标志的函数来解决此问题。我同意这是一个糟糕的设计。

【讨论】:

啊,很好。不知道那些。 同样的事情也可以在 Octave 中工作,这很了不起,因为绘图是 Octave 通常不同于普通 Matlab 功能的方式之一。 set(0,'DefaultFigureVisible','off'); 非常完美!它极大地提高了程序的性能。就好像它花费了更多的时间为数字创建窗口而不是实际进行实际计算。 @olchauvin:请注意,EMS 暗示绘图仍在创建中(“它仍在创建绘图,这对于计算时间和/或 RAM 问题可能是不可取的。") 一个简单的close all,定期运行,如果它们正在消耗大量资源,可能有助于清理这些不可见的图。 @Li-aung Yip:是的,谢谢。由于我在程序开头有一个close all,所以没问题。【参考方案3】:

以前的方法都很好,但一个简单而好的习惯是使用"on/off parameter"。所以基本上,在你的代码的开头,你可以添加如下内容:

DisplayFigure = 1; %1 = display, 0 = no display

之后,为所有与绘图相关的命令添加"if DisplayFigure == 1 ... end",这些命令应位于 if 语句中(上面的 ...)。因此,您甚至不会计算绘图,这将为您节省大量时间和内存。您只需更改变量“DisplayFigure”的值即可绘制或不绘制图形。

【讨论】:

以上是关于在 Matlab 中禁用绘图的主要内容,如果未能解决你的问题,请参考以下文章

绘图时禁用双击放大谷歌地图

如何禁用替换、插入绘图、查找、学习、说话、说话..、暂停 UItextfield?

为啥禁用顶点属性数组零时OpenGL绘图失败?

如何在离线绘图上自定义或禁用右键菜单?

禁用照明的 OpenGL 绘图失去其“深度”

在 -[CALayer setNeedsDisplayInRect:] 中禁用隐式动画