主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

copyobj

复制图形对象及其子级

    说明

    newobj = copyobj(obj,parent) 创建指定图形对象的副本,将其分配给指定的新父级,并返回新对象。如果 obj 有子级,copyobj 也会复制它们。

    copyobj 不复制依赖其原始上下文的属性或子对象,包括回调属性或与原始对象关联的任何应用程序数据。有关详细信息,请参阅不复制的内容

    示例

    newobj = copyobj(obj,parent,"legacy") 还会复制对象回调属性和对象应用程序数据。此行为与 R2014b 之前的 copyobj 功能一致。

    示例

    全部折叠

    将一个曲面对象复制到不同图窗中的新坐标区,以同时从两个角度查看绘图。

    创建一个曲面对象。

    obj = surf(peaks);

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

    创建一个新图窗和坐标区。然后,创建曲面对象的一个副本,并将其分配给新坐标区。通过将相机视线设置为 60 度方位角和 30 度仰角来更改新绘图的视图。打开网格以匹配原始图窗配置,该配置不会随曲面对象一起复制。

    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.

    创建一组相似的绘图,并通过将第一个图中的文本对象和线条标记对象复制到其他每个图中,在每个图上标记相同的数据点。

    创建第一个绘图,并使用文本对象和线标记对象对其进行标记。

    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.

    创建另一个不带标签的绘图,并通过将文本和线标记对象(tlm)分配给新坐标区,将其复制到该图。返回文本和线标记对象副本。

    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.

    将几个图窗中的对象复制到一个使用分块图布局的图窗中。

    创建包含正弦图的第一个图窗。

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

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

    创建包含四个绘制的线条和一个图例的第二个图窗。

    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.

    使用分块图布局创建第三个图窗,并将第一个和第二个图窗中的绘图和图例复制到第三个图窗中的分块中。

    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.

    将一个分块图布局中不同分块的对象复制到多个图窗中。

    创建一个包含具有两个绘图的 2×1 分块图布局的图窗。第一个分块包含一个正弦图,第二个分块包含四个绘制的线条。

    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.

    创建一个新图窗,并将第一个分块的坐标区复制到新图窗中。要允许坐标区填充整个图窗,请将坐标区的位置重置回默认值。

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

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

    创建另一个新图窗,并将第二个分块的坐标区复制到新图窗中。要允许坐标区填充整个图窗,请将坐标区的位置重置回默认值。

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

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

    将一个包含多个用户界面控件的面板从一个图窗复制到另一个图窗。

    创建一个图窗,其中有一个面板。然后,在该面板中创建两个单选按钮并设置其值。

    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.

    创建一个背景较暗的新图窗,并将面板从第一个图窗复制到第二个图窗中。然后,更改第二个图窗中单选按钮的值。

    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 的单个调用中的同一父级。

    所复制对象的父级,指定为单个对象或对象向量。父级必须适合所复制的对象。例如,可以将线条复制到坐标区中,但不能复制到图窗或面板中。

    输出参量

    全部折叠

    图形对象的副本,以单个对象或对象向量形式返回。

    • 如果 obj 是单个对象,并且 parent 也是单个对象,则 newobj 是单个对象。

    • 如果 obj 是单个对象,而 parent 是对象向量,则 newobj 是对象向量。每个 newobj(i) 都是分配给父级 parent(i)obj 的副本。newobj 的长度等于 parent 的长度。

    • 如果 obj 是对象向量,而 parent 是单个对象,则 newobj 是对象向量。每个 newobj(i) 都是分配给父级 parentobj(i) 的副本。newobj 的长度等于 obj 的长度。

    • 如果 objparent 都是对象向量,则其长度必须相同,而 newobj 是由相同长度的对象组成的向量。每个 newobj(i) 都是分配给父级 parent(i)obj(i) 的副本。

    所复制对象不同于原始对象。因此,在比较这两个对象时,== 返回 false。有关详细信息,请参阅不复制的内容

    详细信息

    全部折叠

    提示

    • 在复制图例或颜色栏时,您必须同时复制关联的坐标区。

    • 在构建用户界面时,不要在创建函数中调用 copyobjtextwrap(它会调用 copyobj)。复制用户界面控件对象会重复调用创建函数,从而超出递归限制,因此会导致错误。

    版本历史记录

    在 R2006a 之前推出

    另请参阅

    函数