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

时间:2014-11-07 12:35:05

标签: matlab matlab-figure matlab-hg2

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

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

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

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

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

enter image description here

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

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,然后在两者中打开,则显示下两个数字:

enter image description here enter image description here

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

1 个答案:

答案 0 :(得分: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单元格数组再次手动制作图表。这是一种无聊的方式,但如果重新生成输出需要很长时间,可能值得尝试。