如何通过以前保存的图形手柄重现图形?

时间:2013-07-08 16:47:29

标签: matlab

我在三维散点图中绘制了一组数据的分布。

h = scatter3(D1,D2,D3,'.');

我已保存h但现在需要重现图表。我应该在h调用什么函数,以便我可以在不重新计算D1,D2,D3的情况下获取图形?因为重新计算D1,D2,D3在计算上是昂贵的,所以当我需要图表时,我不想每次都这样做。

3 个答案:

答案 0 :(得分:2)

如果您有以下信息,则可以“重新创建图表”:

  1. 用于创建图表的数据
  2. 使用的图表类型
  3. 任何可选设置(颜色,轴,缩放,方向等)
  4. 图形(或图形)的“句柄”指向存储所有信息的存储器 - 但它只是一个指针。除非你保存“指向的东西”,否则对你没用。使用单个命令可以实现这一目标。创建图形后,只需键入

    即可
    saveas(gcf, 'myLastGraph.m', 'm');
    

    代替gcf(“获取当前数字” - 最近选择的数字的句柄),您可以使用要保存的图形的句柄(必须仍然可见) - 例如,代码示例中的h。这将在当前目录中创建两个文件(如果在第二个参数中指定完整路径,则会在该目录中创建文件):

    myLastGraph.fig
    myLastGraph.m
    

    现在您可以关闭所有图表,清除所有变量。接下来,您只需运行

    即可
    myLastGraph
    
    从命令行

    - 将使用磁盘上保存的数据重新创建图表。

答案 1 :(得分:0)

如果图表仍处于打开状态,您可以使用以下命令获取Xdata,Ydata和Zdata:

XYZCell=get(get(get(h,'currentaxes'),'children'),{'xdata','ydata','zdata'});

或者如果你不想要一个细胞:

XData=get(get(get(gcf,'currentaxes'),'children'),'xdata'); YData=get(get(get(gcf,'currentaxes'),'children'),'ydata'); ZData=get(get(get(gcf,'currentaxes'),'children'),'zdata');

如果图表已关闭,h就没用了 - 据我所知,没有办法从封闭的图形句柄中改造图形。

为什么不先使用保存变量?

I1=d1; I2=d2; I3=d3; scatter3(d1,d2,d3,'.');

答案 2 :(得分:0)

通过“重新计算的计算成本”,我不确定您是否意味着计算D1,D2,D3的值或绘制这些值。如果计算密集,请将值保存到工作区或将其保存到磁盘(例如,打印到文件),以便稍后再次加载它们以进行绘图。您还可以将图形保存为* .fig文件,以后可以打开和编辑,如果绘图是缓慢的部分,这可能是一个不错的选择。

关闭窗口后,我无法使用句柄(h)来恢复数据。

然而,在图形窗口仍然打开的情况下,您可以使用h来提取数据:

xyzData = get(get(h, 'children'), {'xdata', 'ydata', 'zdata'});

(注意:h = scatter3(D1,D2,D3,'.');设置h作为散子组的句柄。@Hugh Nolan的正确答案要求h成为数字的句柄。)