我想编辑保存为.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'
属性编辑手柄。
这可以在没有绘制数字的情况下完成吗?
我尝试了,但使用fopen
,fread
和他们的朋友却没有成功。
有人知道怎么做我想做的事吗?
答案 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重新加载的那一刻绘制数字。