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