在2014b中重绘2013b中保存的图
Posted
技术标签:
【中文标题】在2014b中重绘2013b中保存的图【英文标题】:Redraw a figure saved in 2013b in 2014b 【发布时间】:2015-01-04 06:04:16 【问题描述】:由于 MATLAB 在 R2014b 中更改了它的图形引擎,我决定重新运行我的一些代码以获得更好看的图形。不幸的是,我拥有的最后一个代码需要很长时间才能运行,我想高度避免重新运行代码以获得更好的数字。
我将结果保存在 R2013b 中的 .fig
文件中。但是,如果我在 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
【问题讨论】:
drawnow
什么都不做?此外,它是一个简单的情节吗(plot
或scatter
输出?)。如果是这样,您可以很容易地get
出图中的数据。 (轮廓或类似的东西——不是那么容易)。
@nkjt 绝对不是一个简单的情节。它有 12 个子图,它们的数据量不同。
你能把原图上传到某个地方吗?
@AnderBiguri:你可以试试copyobj
吗?类似这样的东西:***.com/a/4010043/97160
@AnderBiguri:我的想法是先hgload
这个图,然后在它上面使用copyobj
创建一个新副本,希望它可以用新的图形系统渲染...无论如何,我只是尝试在我的最后重现问题并且我不能;我使用了一个保存在 R2014a 中的简单绘图,然后将其加载到 R2014b 中的 FIG 文件,并使用新图形(平滑线和新颜色等)进行渲染...你能分享导致的原始 FIG 文件吗问题,或者至少创建一个更简单的问题来展示问题?
【参考方案1】:
有一个迂回的方法可以做到这一点——只需使用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
subplotsal=values;
end
end
然后您可以使用subplots
元胞数组再次手动绘制绘图。这是一种无聊的方法,但如果重新生成输出需要很长时间,可能值得尝试。
【讨论】:
以上是关于在2014b中重绘2013b中保存的图的主要内容,如果未能解决你的问题,请参考以下文章