5

我有情节的处理程序,或图形的句柄示例:

h = plot([1:0.2:10])
xx=get(h)
xx = 

           DisplayName: ''
            Annotation: [1x1 handle]
                 Color: [0 0 1]
             LineStyle: '-'
             LineWidth: 0.5000
                Marker: 'none'
            MarkerSize: 6
       MarkerEdgeColor: 'auto'
       MarkerFaceColor: 'none'
                 XData: [1x46 double]
                 YData: [1x46 double]
                 ZData: [1x0 double]
          BeingDeleted: 'off'
         ButtonDownFcn: []
              Children: [0x1 double]
              Clipping: 'on'
             CreateFcn: []
             DeleteFcn: []
            BusyAction: 'queue'
      HandleVisibility: 'on'
               HitTest: 'on'
         Interruptible: 'on'
              Selected: 'off'
    SelectionHighlight: 'on'
                   Tag: ''
                  Type: 'line'
         UIContextMenu: []
              UserData: []
               Visible: 'on'
                Parent: 173.0107
             XDataMode: 'auto'
           XDataSource: ''
           YDataSource: ''
           ZDataSource: ''

这个处理程序包含所有的情节信息,我怎样才能再次绘制出来?这是一个简单的示例,plot但它也应该可以使用slice

4

3 回答 3

6

如果我正确理解您的问题,您想使用 struct 重现绘图xx。cook 提供的答案是正确的,但这是实现您想要的更短的方法:

figure
h2 = plot(0);
ro_props = [fieldnames(rmfield(xx, fieldnames(set(h2)))); 'Parent'];
xx = rmfield(xx, ro_props);
set(h2, xx)

最后一个set命令使用 structxx设置所有值并重现您的绘图。请注意,ro_propsxx调用set.

编辑:修改答案以根据此建议自动检测只读属性。

于 2012-12-10T13:06:19.110 回答
5

你可以使用copyobj

h = plot([1:0.2:10])
xx=get(h)
figure
copyobj(h,gca)

这会将绘图复制到一个新图形上

见: http: //www.mathworks.com/help/matlab/ref/copyobj.html

更新

我认为您不能直接从结构 xx 创建,尝试这样做:

h = plot([1:0.2:10])
xx=get(h)

h2 = plot(0,0)
set(h2,xx)

引发错误

Error using graph2d.lineseries/set
Changing the 'Annotation' property of line is not allowed.

您需要手动设置一些属性值,如下所示:

h = plot([1:0.2:10])
xx=get(h)


figure
h2 = plot(0.0)

names = fieldnames(xx);

fieldCount = size(names,1);

protectedNames = {'DisplayName' 'Annotation' 'BeingDeleted' 'Type' 'Parent'}

for i = 1:fieldCount
    name = names{i};
    if ( ismember(protectedNames, name) == false  )


        set(h2, name, getfield(xx,name))

    end
end

yy=get(h2)
于 2012-12-10T12:11:20.080 回答
0

我不知道是否有更简单的方法,但是您在 XData 和 YData 中有 x,y 值。

做:

figure
plot(get(h,'XData'),get(h,'YData'))
于 2012-12-10T12:00:21.490 回答