在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 什么都不做?此外,它是一个简单的情节吗(plotscatter 输出?)。如果是这样,您可以很容易地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中保存的图的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Qt 应用程序中重绘 matplot

Android:在布局中重绘特定视图

如何在 SWIFT 中重绘我的视图?

如何在窗口中重绘 Qt 窗口或 tabview

在 MFC 中重绘时闪烁

在引导模式中重绘或重新计算数据表的宽度