是否可以使用先前由' get()'
检索的属性在删除后删除一行。例如:
% Create the plot and 'get' its properties.
axes
P = plot(1:360, sind(1:360));
PG = get(P);
% Delete the plot.
delete(P)
% Replot the line...
plot(PG) % ?????
我希望它是可推广的,即解决方案适用于表面图,线图,文本注释等。
答案 0 :(得分:5)
不是删除和重新创建对象,而是可以使其不可见:
set(P, 'visible', 'off')
再次可见
set(P, 'visible', 'on')
如果您确实要重新创建已删除的对象,可以按以下步骤操作:创建相同类型的对象并使用for
循环将其属性设置为存储的值。需要try
-catch
块,因为某些属性是只读的并发出错误。
%// Replot the object...
Q = plot(NaN); %// create object. Plot any value
fields = fieldnames(PG);
for n = 1:numel(fields)
try
set(Q, fields{n}, getfield(PG, fields{n})); %// set field
catch
end
end
您可以将此方法用于其他类型的图形对象,例如surf
,但是您必须更改创建对象的行(上面代码中的第一行)。例如,对于surf
,它将类似于
Q = surf(NaN(2)); %// create object. surf needs matrix input
我已在R2010b中使用plot
和surf
对此进行了测试。
copyobj
使用copyobj
在另一个(可能是不可见的)图形中制作对象的副本,然后从中恢复它。这自动适用于任何对象类型。
%// Create the plot
P = plot(1:360, sind(1:360));
a = gca; %// get handle to axes
%// Make a copy in another figure
f_save = figure('visible','off');
a_save = gca;
P_saved = copyobj(P, a_save);
%// Delete the object
delete(P)
%// Recover it from the copy
P_recovered = copyobj(P_saved, a);
答案 1 :(得分:1)
您可以使用PG
命令(就像您已经执行的那样)将对象存储为结构get
,然后使用set
- 命令一次设置所有参数。有些只读字段需要在设置之前删除,并且对象必须属于同一类型。在下面的示例中,我们使用plot(0)
创建一个用上一个图中的数据覆盖的图。
% Create the plot
figure
P = plot(1:360, sind(1:360));
% Store plot object
PG = get(P);
% Delete the plot
delete(P);
% Remove read-only fields of plot object
PG = rmfield(PG,{'Annotation','BeingDeleted','Parent','Type'});
% Create a new plot
figure
P = plot(0);
% Set the parameters
set(P,PG);
如果您不想手动删除字段,请使用try-catch
- 块并按照Luis Mendo的答案中所述迭代所有字段。