メインコンテンツ

copyobj

グラフィックス オブジェクトおよびその子をコピーする

    説明

    newobj = copyobj(obj,parent) は、指定されたグラフィックス オブジェクトのコピーを作成し、それを指定された新しい親に割り当て、新しいオブジェクトを返します。obj に子がある場合、copyobj は子もコピーします。

    copyobj は、元のコンテキストに依存するプロパティや子オブジェクト (コールバック プロパティや元のオブジェクトに関連付けられたアプリケーション データなど) をコピーしません。詳細については、コピーされないものを参照してください。

    newobj = copyobj(obj,parent,"legacy") は、さらにオブジェクト コールバック プロパティとオブジェクト アプリケーション データをコピーします。この動作は、R2014b より前の copyobj の機能と一致しています。

    すべて折りたたむ

    surface オブジェクトを別の Figure の新しい座標軸にコピーして、プロットを 2 つの角度から同時に表示します。

    surface オブジェクトを作成します。

    obj = surf(peaks);

    Figure contains an axes object. The axes object contains an object of type surface.

    新しい Figure と座標軸を作成します。次に、surface オブジェクトのコピーを作成し、それを新しい座標軸に割り当てます。カメラの見通し線を方位角 60 度、仰角 30 度に設定して、新しいプロットのビューを変更します。グリッドをオンにして、surface オブジェクトと一緒にコピーされない元の Figure 構成に合わせます。

    fig = figure;
    ax = axes;
    newobj = copyobj(obj,ax);
    view(ax,60,30)
    grid(ax,"on")

    Figure contains an axes object. The axes object contains an object of type surface.

    類似したプロットのセットを作成し、最初のプロットから他の各プロットに text オブジェクトとライン マーカー オブジェクトをコピーすることで、各プロット上の同じデータ点にラベルを付けます。

    最初のプロットを作成し、text オブジェクトとライン マーカー オブジェクトを使用してラベルを付けます。

    x = 0:.1:2*pi;
    y = sin(x);
    plot(x,y)
    title("Sine Plot")
    t = text(5*pi/4, -sqrt(2)/2, "\{5*pi/4,-sqrt(2)/2\}\rightarrow", ...
       "HorizontalAlignment","right");
    lm = xline(5*pi/4);

    Figure contains an axes object. The axes object with title Sine Plot contains 3 objects of type line, text, constantline.

    ラベルなしで 2 番目のプロットを作成し、text オブジェクトとライン マーカー オブジェクト (t および lm) を新しい座標軸に割り当ててプロットにコピーします。text オブジェクトおよびライン マーカー オブジェクトのコピーを返します。

    figure
    x = pi/4:.1:9*pi/4;
    plot(x,cos(x))
    title("Cosine Plot")
    ax2 = gca;
    ax2.Color = [0.902 0.902 0.902]; % light gray
    lbl2 = copyobj([t,lm],ax2);

    Figure contains an axes object. The axes object with title Cosine Plot contains 3 objects of type line, constantline, text.

    複数の Figure から、タイル表示チャート レイアウトを使用する 1 つの Figure にオブジェクトをコピーします。

    正弦波プロットを含む最初の Figure を作成します。

    f1 = figure;
    ax1 = axes(f1);
    plot(ax1,sin(1:10))

    Figure contains an axes object. The axes object contains an object of type line.

    4 本のプロット線と凡例を含む 2 つ目の Figure を作成します。

    f2 = figure;
    ax2 = axes(f2);
    plot(ax2,magic(4));
    lgd = legend(ax2);

    Figure contains an axes object. The axes object contains 4 objects of type line.

    タイル表示チャート レイアウトを使用して 3 つ目の Figure を作成し、最初と 2 つ目の Figure のプロットと凡例を 3 つ目の Figure のタイルにコピーします。

    f3 = figure;
    t = tiledlayout(f3,2,1);
    
    ax1c = copyobj(ax1,t);
    ax2c = copyobj([ax2,lgd],t);
    ax1c(1).Layout.Tile = 1;
    ax2c(1).Layout.Tile = 2;

    Figure contains 2 axes objects. Axes object 1 contains an object of type line. Axes object 2 contains 4 objects of type line.

    タイル表示チャート レイアウト内のさまざまなタイルからオブジェクトを複数の Figure にコピーします。

    2 つのプロットをもつ 2 行 1 列のタイル表示チャート レイアウトを含む Figure を作成します。最初のタイルには正弦波プロットが含まれており、2 つ目のタイルには 4 本のプロット線が含まれています。

    f = figure;
    t = tiledlayout(f,2,1);
    
    ax1 = nexttile(t);
    plot(ax1,sin(1:10))
    
    ax2 = nexttile(t);
    plot(ax2,magic(4))

    Figure contains 2 axes objects. Axes object 1 contains an object of type line. Axes object 2 contains 4 objects of type line.

    新しい Figure を作成し、最初のタイルから新しい Figure に座標軸をコピーします。座標軸が Figure 全体を占めるようにするために、座標軸の位置を既定値にリセットします。

    f1 = figure;
    ax1c = copyobj(ax1,f1);
    set(ax1c,"OuterPosition","default");

    Figure contains an axes object. The axes object contains an object of type line.

    別の新しい Figure を作成し、2 つ目のタイルから新しい Figure に座標軸をコピーします。座標軸が Figure 全体を占めるようにするために、座標軸の位置を既定値にリセットします。

    f2 = figure;
    ax2c = copyobj(ax2,f2);
    set(ax2c,"OuterPosition","default")

    Figure contains an axes object. The axes object contains 4 objects of type line.

    複数のユーザー インターフェイス コントロールを含むパネルを Figure 間でコピーします。

    Figure と、その内部に配置されたパネルを作成します。次に、パネル内に 2 つのラジオ ボタンを作成し、その値を設定します。

    f1 = figure;
    p1 = uipanel(f1,"Position",[0.1 0.1 0.35 0.65]);
    rb1 = uicontrol(p1,"Style","radiobutton","String","Option 1", ...
        "Position",[10 50 100 22]);
    rb2 = uicontrol(p1,"Style","radiobutton","String","Option 2", ...
        "Position",[10 28 100 22]);
    p1.Children(1).Value = 0;
    p1.Children(2).Value = 1;

    Figure contains an object of type uipanel.

    背景が暗い新しい Figure を作成し、最初の Figure から 2 つ目の Figure にパネルをコピーします。次に、2 つ目の Figure のラジオ ボタンの値を変更します。

    f2 = figure;
    f2.Color = [0.902 0.902 0.902];
    p2 = copyobj(p1,f2);
    p2.Children(1).Value = 1;
    p2.Children(2).Value = 0;

    Figure contains an object of type uipanel.

    入力引数

    すべて折りたたむ

    コピーするグラフィックス オブジェクト。単一のオブジェクト、またはオブジェクトのベクトルとして指定します。

    メモ

    copyobj の 1 回の呼び出しで、同じオブジェクトを同一の親オブジェクトに複数回コピーすることはできません。

    コピーされたオブジェクトの親。単一のオブジェクト、またはオブジェクトのベクトルとして指定します。親はコピーされたオブジェクトに適切なものでなければなりません。たとえば、line は axes にコピーすることはできますが、Figure や panel にはコピーできません。

    出力引数

    すべて折りたたむ

    グラフィックス オブジェクトのコピー。単一のオブジェクト、またはオブジェクトのベクトルとして返されます。

    • obj が単一のオブジェクトで、parent が単一のオブジェクトである場合、newobj は単一のオブジェクトです。

    • obj が単一のオブジェクトで、parent がオブジェクトのベクトルである場合、newobj はオブジェクトのベクトルです。各 newobj(i) は、親 parent(i) に割り当てられた obj のコピーです。newobj の長さは parent の長さと同じです。

    • obj がオブジェクトのベクトルで、parent が単一のオブジェクトである場合、newobj はオブジェクトのベクトルです。各 newobj(i) は、親 parent に割り当てられた obj(i) のコピーです。newobj の長さは obj の長さと同じです。

    • objparent の両方がオブジェクトのベクトルである場合、それらは同じ長さでなければならず、newobj は同じ長さのオブジェクトのベクトルです。各 newobj(i) は、親 parent(i) に割り当てられた obj(i) のコピーです。

    コピーされたオブジェクトは元のオブジェクトとは異なります。したがって、2 つのオブジェクトを比較すると、==false を返します。詳細については、コピーされないものを参照してください。

    詳細

    すべて折りたたむ

    ヒント

    • 凡例またはカラー バーをコピーするときは、関連付けられている座標軸もコピーしなければなりません。

    • ユーザーインターフェイスを構築するときに、作成関数内で copyobj や (copyobj を呼び出す) textwrap を呼び出さないでください。ユーザー インターフェイス コントロール オブジェクトをコピーすると、作成関数が繰り返し呼び出され、再帰制限を超えるため、エラーが発生します。

    バージョン履歴

    R2006a より前に導入

    参考

    関数