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
有一种迂回的方式可以做到这一点 - 只需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单元格阵列再次手动绘制图形.这是一种无聊的方式,但如果重新生成输出需要很长时间,可能值得尝试.