重绘在2014b中保存在2013b中的图形

And*_*uri 19 matlab matlab-figure matlab-hg2

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

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

是否可以使用MATLAB R2014b绘图引擎重绘图形?如果是的话,我怎么能这样做?

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

示例:此图是在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')
Run Code Online (Sandbox Code Playgroud)

如果此代码在2013b和2014b中运行,在两者中保存为fig,然后在两者中打开,则显示下两个数字:

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

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

all*_*ije 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
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用subplots单元格阵列再次手动绘制图形.这是一种无聊的方式,但如果重新生成输出需要很长时间,可能值得尝试.