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

How to edit property of figure saved in .fig file without displaying it

我想编辑某些 属性 保存为 .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 和他们的朋友。

有人知道我想做什么吗?

我的解决方案基于 url post 用户 4506754 编辑的帖子:http://www.mathworks.com/matlabcentral/newsreader/view_thread/306249 在那里,Jesse Hopkins posts (post 15) 你可以编辑一个 属性 'ResizeFcn' 来在 MATLAB 创建图形时执行一个函数。这在我的 MATLAB 安装上不起作用,但引导我研究可以附加到图形属性中的不同函数。此页面记录了所有图形属性:http://mathworks.com/help/matlab/ref/figure-properties.html。在那里我找到了 'CreateFcn' 属性。它的描述包含:

This property specifies a callback function to execute when MATLAB creates the figure. MATLAB initializes all figure property values before executing the CreateFcn callback.

表示图加载属性,包括'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 加载时绘制图形。