如何编辑保存在.fig文件中的图形属性而不显示它

时间:2015-01-27 15:54:31

标签: matlab file-io properties matlab-figure

我想编辑保存为.fig(MATLAB的默认格式)文件的MATLAB图形的某个属性。

我在脚本中创建了大量图形密集型图形,因此我选择不使用set(0,'DefaultFigureVisible','off')使默认图形不可见来显示它们。这会将任何新数字的'Visible'属性设置为'off'。通过这种方式,我可以创建,编辑,保存等数字,而无需绘制它们,这可能会对CPU,GPU和它们的记忆产生负担。我使用saveas(handle,'filename.fig')命令将数字保存为.fig文件。这也保存了'Visible'属性,这在我想打开图形时会出现问题(例如,双击Windows资源管理器中的文件)。它会加载图形,但它不会显示它,因为它的'Visible'属性设置为'off'

我希望保存所有.fig文件,并将属性设置为'on',但如何在不显示(=计算)数字的情况下实现此目的?在我使用set(handle,'Visible','on')的那一刻,绘制了这个数字。

所以基本上,我想在比在MATLAB中作为图形加载时更低的级别编辑文件。

我认为可以按照以下方式完成,但我不确切知道如何实现它。可以使用s=load('filename.fig','-mat');加载.fig的数据,就好像它是.mat文件一样。这将加载一个结构s,其中包含一些包含所有图形数据,属性等的字段。现在,必须在此未知结构中找到图形句柄,并且'Visible'属性编辑手柄。

这可以在没有绘制数字的情况下完成吗?

我尝试了,但使用fopenfread和他们的朋友却没有成功。

有人知道怎么做我想做的事吗?

1 个答案:

答案 0 :(得分:3)

我的解决方案基于user4506754发布的网址中的线程:http://www.mathworks.com/matlabcentral/newsreader/view_thread/306249 在那里,Jesse Hopkins发布(帖子15)你可以编辑一个属性'ResizeFcn'来在MATLAB创建一个数字时执行一个函数。这不适用于我的MATLAB安装,但请引导我查看可以附加到其属性中的图形的不同功能。此页面记录了所有图形属性:http://mathworks.com/help/matlab/ref/figure-properties.html。在那里我找到了'CreateFcn'属性。其描述包含:

  

此属性指定在MATLAB创建图形时要执行的回调函数。 MATLAB在执行CreateFcn回调之前初始化所有figure属性值。

这意味着该图已加载其属性,包括'Visible'属性为'off',然后调用'CreateFcn'

设置'CreateFcn'以使图形可见,然后解决我的问题。

set(gcf,'CreateFcn','set(gcf,''Visible'',''on'')')

一个例子:

ezplot(@sin) % draw a simple figure containing a sine wave, title, etc.
set(gcf,'Visible','off','CreateFcn','set(gcf,''Visible'',''on'')' % this disables the figure and set the 'CreateFcn' property simultaneously
saveas(gcf,'sin.fig') % save the figure in the current folder as a .fig file
close % closes current figure

现在转到资源管理器中的当前文件夹,然后双击sin.fig文件。它使MATLAB加载它, poof ,绘制图形。

找到解决方案。

这不会像我最初要求的那样编辑.fig文件(作为解决方案),但它是原始问题的替代解决方案。现在我可以在不显示数字的情况下创建和保存数字,但在MATLAB重新加载的那一刻绘制数字。