19

由于 MATLAB 在 R2014b 中更改了它的图形引擎,我决定重新运行我的一些代码以获得更好看的图形。不幸的是,我拥有的最后一个代码需要很长时间才能运行,我想高度避免重新运行代码以获得更好的数字。

我将结果保存.fig在 R2013b 的文件中。但是,如果我在 R2014b 中打开它,它仍然是旧格式。

是否可以使用 MATLAB R2014b 绘图引擎重绘图形?如果是,我该怎么做?

注意:从字面上看,该图形是使用新引擎打开和绘制的,但是,它保留了其旧格式。虽然带有title()命令的新图形会绘制一个漂亮的大而粗体的标题,但如果使用“drawnow”重绘这个图形或者我为它生成代码,格式保持不变。

示例:此图创建于 2013b,并于 2014b 重新绘制。您可以看到标题的绘制格式title('whatever')与新图形句柄中的绘制格式不同。看起来“.fig”保存并设置了它生成的版本的默认值。因此,重绘时,绘图颜色、标题、标签等看起来就像旧的图形句柄。

在此处输入图像描述

这可以使用以下代码进行测试。请注意,这是一个过于简化的问题,问题不是关于标题或标签,而是所有一般的图形内容。

rng(1)


figure()
x = 1:50;
y = rand(1, 50);

plot(x,y)
title('this NICE Title')
xlabel('labels!')
ylabel('some other labels','Interpreter','Latex')

如果此代码在 2013b 和 2014b 中运行,在两者中都保存为 fig,然后在两者中都以 fig 形式打开,则会出现接下来的 2 个数字:

在此处输入图像描述 在此处输入图像描述

2013b 无花果文件:http ://s000.tinyupload.com/index.php?file_id=02053933004513599550

4

1 回答 1

6

有一种迂回的方法可以做到这一点——仅hgopen用于加载图形,然后提取数据以在 2014b 中重新绘制它:

h1=hgopen('test.fig');              % h1 = handle to the figure
allaxes=get(h1,'children');         % allaxes = array with axes handles 
for a=1:length(allaxes)
    ax=allaxes(a);
    allines=get(ax,'children');     % all lines in current axes
    for l=1:length(allines)
        lin=allines(l);
        values=get(lin,'ydata');    % values of the current line
        subplots{a}{l}=values;
    end
end

然后,您可以使用subplots元胞数组再次手动制作绘图。这是一种无聊的方法,但如果重新生成输出需要很长时间,可能值得尝试。

于 2015-10-20T08:30:55.533 回答