问题 在Matlab中禁用绘图


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

但是,有很多图形由程序及其各种函数绘制,因此每次运行程序时,我都要等待所有图形显示,这非常烦人且耗时(特别是当你是使用小型笔记本电脑)。 程序执行后,我用a关闭它们 close all

所以我的问题是:

有没有办法在Matlab中禁用所有绘图/图形/图形? 无论是在选项中,还是通过执行某些代码 disable plot 和 enable plot 确保没有显示数字。

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


8677
2018-04-12 18:32


起源



答案:


尝试两个命令的某些组合:

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

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

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

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

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


13
2018-04-12 18:43



很好。不知道那些。 - Richante
同样的事情也适用于Octave,这是非常了不起的,因为绘图是Octave通常与普通Matlab功能不同的方式之一。 - ely
该 set(0,'DefaultFigureVisible','off'); 真是太完美了!它大大提高了程序的性能。就像花费更多时间为数字创建窗口而不是实际进行实际计算一样。 - Mesop
@olchauvin:请注意,EMS暗示仍在创建地块(“它仍在创建绘图,这对于计算时间和/或RAM问题可能是不合需要的。“) 一个简单的 close all如果它们耗尽了大量资源,那么定期运行可能对清理这些不可见的图有用。 - Li-aung Yip
@ Li-aung Yip:好的,谢谢。因为我有一个 close all 在程序开始时,它会没事的。 - Mesop


答案:


尝试两个命令的某些组合:

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

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

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

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

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


13
2018-04-12 18:43



很好。不知道那些。 - Richante
同样的事情也适用于Octave,这是非常了不起的,因为绘图是Octave通常与普通Matlab功能不同的方式之一。 - ely
该 set(0,'DefaultFigureVisible','off'); 真是太完美了!它大大提高了程序的性能。就像花费更多时间为数字创建窗口而不是实际进行实际计算一样。 - Mesop
@olchauvin:请注意,EMS暗示仍在创建地块(“它仍在创建绘图,这对于计算时间和/或RAM问题可能是不合需要的。“) 一个简单的 close all如果它们耗尽了大量资源,那么定期运行可能对清理这些不可见的图有用。 - Li-aung Yip
@ Li-aung Yip:好的,谢谢。因为我有一个 close all 在程序开始时,它会没事的。 - Mesop


您可以从命令行运行matlab:

matlab -nojvm

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

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

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

我所知道的“关闭绘图”的最接近的方式是这样的函数的文件夹,您可以添加到禁用绘图的路径,并删除以启用。


3
2018-04-12 18:43



+1创意解决方案,即使它很糟糕(故意暗示MATLAB内置?) - Li-aung Yip
是的,更糟糕​​的是,因为我最近责备某人给出答案 道格赫尔哭了 - Richante
我确实看到了。 ;) - Li-aung Yip


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

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

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


0
2018-02-05 01:33