我在3d散点图中绘制了一组数据的分布。
h = scatter3(D1,D2,D3,'.');
我已经保存了h
,但现在需要重新生成图形。我应该在h
上调用什么函数,才能在不重新计算D1、D2、D3的情况下获得图形?因为重新计算D1、D2和D3的计算成本很高,所以我不想每次需要图形时都这样做。
发布于 2013-07-08 17:46:22
如果您具有以下信息,则可以进行“重新创建图形”:
使用的图形类型
图形(或图形)的“句柄”指向存储所有信息的内存--但它只是一个指针。除非您保存“指向的内容”,否则它对您没有任何用处。有一种非常酷的方式可以用一条命令来实现这一点。创建图形后,只需键入
saveas(gcf, 'myLastGraph.m', 'm');
除了gcf
("get current figure“-最近选择的图形的句柄),您可以使用您想要保存的图形的任何句柄(必须仍然可见)-例如,代码示例中的h
。这将在当前目录中创建两个文件(如果在第二个参数中指定完整路径,则将在该目录中创建文件):
myLastGraph.fig
myLastGraph.m
现在你可以关闭所有的图表,清除所有的变量。接下来,您可以简单地运行
myLastGraph
从命令行-将使用保存在磁盘上的数据重新创建图形。
发布于 2013-07-08 16:51:53
如果图形仍处于打开状态,则可以使用以下命令获取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,'.');
发布于 2013-07-08 17:24:32
我不确定“重新计算的计算代价很高”是指计算D1、D2、D3的值,还是绘制这些值。如果计算很密集,请将值保存到工作区或将其保存到磁盘(例如,打印到文件),以便以后可以再次加载它们进行绘图。还可以将图形另存为*.fig文件,以便稍后打开和编辑,如果绘图速度较慢,这可能是一个很好的选择。
据我所知,一旦关闭了窗口,就无法使用句柄(h
)来取回数据。
但是,在图形窗口仍然打开的情况下,您可以使用h
来拉入数据:
xyzData = get(get(h, 'children'), {'xdata', 'ydata', 'zdata'});
(注意:h = scatter3(D1,D2,D3,'.');
将h
设置为散布组的句柄。@Hugh Nolan很好的回答要求h
是这个数字的句柄。)
https://stackoverflow.com/questions/17531926
复制相似问题