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。提供された答え ccook は正しい軌道に乗っていますが、ここにあなたが望むものを達成するためのより短い方法があります:

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

最後のsetコマンドは structxxを使用してすべての値を設定し、プロットを再現します。を呼び出す前に、読み取り専用プロパティro_propsが から削除されることに注意してください。xxset

編集:この提案に従って読み取り専用プロパティを自動的に検出するように回答を修正しました。

于 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 に答える