15.4.6对象组

许多Octave高级绘图函数返回其他图形对象组,或者返回具有链接属性的图形对象,其中一个属性的更改会导致其他属性的更改。将其他对象分组的图形对象是hggroup

 
: hggroup ()
: hggroup (hax)
: hggroup (…, property, value, …)
: h = hggroup (…)

使用轴父对象创建控制柄图形组对象hax.

如果未指定父对象,则会在当前轴中创建组。

可以为hggroup指定多个属性/值对,但它们必须成对出现。完整的属性清单记录在Axes Properties.

可选返回值h是createdhggroup对象的图形句柄。

编程注意事项:hggroup是一种将基本图形对象(如线对象或补丁对象)分组为一个单元的方法,该单元可以重新获取。例如,等高线图的各条线被收集到单个hggroup中,从而可以通过单个命令使它们可见/不可见,set (hg_handle, "visible", "off").

详见: addproperty, addlistener.

广告

例如,简单使用hggroup可能是

x = 0:0.1:10;
hg = hggroup ();
plot (x, sin (x), "color", [1, 0, 0], "parent", hg);
hold on
plot (x, cos (x), "color", [0, 1, 0], "parent", hg);
set (hg, "visible", "off");

其将两个绘图分组为单个对象并直接控制其可见性。的默认属性hggroup与其他图形对象的公共属性集相同。可以使用添加其他属性addproperty作用

 
: addproperty (name, h, type)
: addproperty (name, h, type, arg, …)

创建名为的新属性name在图形对象中h.

type确定要创建的属性的类型。args通常包含属性的默认值,但根据属性的类型,可能会提供其他参数。

支持的属性类型包括:

string

字符串属性。arg包含默认字符串值。

广告
any

未类型化的属性。这种属性可以容纳任何Octave值。args包含默认值。

广告
radio

具有一组有限的可接受值的字符串属性。第一个参数必须是一个字符串,所有可接受的值都用竖线(“|”)分隔。默认值可以通过用“{”}对将其括起来进行符号。默认值也可以作为可选的第二个字符串参数给定。

广告
boolean

布尔属性。此属性类型等效于将“on|off”作为可接受值的radioproperty。arg包含默认属性值。

广告
double

标量二重属性。arg包含默认值。

广告
handle

句柄属性。这类属性拥有agraphics对象的句柄。arg包含默认句柄值。当没有给定默认值时,该属性将初始化为空矩阵。

广告
data

数据(矩阵)属性。arg包含默认的数据值。当没有给定默认值时,数据被初始化为空矩阵。

广告
color

颜色属性。arg包含默认的颜色值。如果未给定默认颜色,则该属性将设置为黑色。可以提供一个可选的第二个字符串参数来指定一组可接受的字符串值(如无线电属性)。

广告

type也可以是核心对象类型和该对象类型的有效属性名的连接。创建的属性与引用的属性具有相同的属性(类型、可能的值、隐藏状态…)。这允许将现有属性克隆到图形对象中h.

示例:

addproperty ("my_property", gcf, "string", "a string value");
addproperty ("my_radio", gcf, "radio", "val_1|val_2|{val_3}");
addproperty ("my_style", gcf, "linelinestyle", "--");

详见: addlistener, hggroup.

广告

一旦将属性添加到hggroup,它不链接到组的子对象或任何其他图形对象的任何其他属性。添加so以控制此新添加的属性的使用方式addlistener函数用于定义属性更改时执行的回调函数。

 
: addlistener (h, prop, fcn)

登记fcn作为属性的监听器prop的图形对象h.

属性监听器在设置属性时执行(按注册顺序)。在执行监听器时,新值已经可用。

prop必须是命名中有效属性的字符串h.

fcn可以是函数句柄、字符串或第一个元素为函数句柄的元胞数组。如果fcn是一个函数句柄,相应的函数应该接受至少2个参数,这些参数将分别困扰对象句柄和空矩阵。如果fcn是一个字符串,它必须是任何有效的八度表达式。如果fcn是cellarray,则第一个元素必须是具有与上述相同签名的函数句柄。元胞数组的下一个元素作为附加参数传递给函数。

用例

function my_listener (h, dummy, p1)
  fprintf ("my_listener called with p1=%s\n", p1);
endfunction

addlistener (gcf, "position", {@my_listener, "my string"})

详见: dellistener, addproperty, hggroup.

广告
 
: dellistener (h, prop, fcn)

删除的注册fcn作为属性的监听器proph.

函数fcn必须是传递给的原始调用的相同变量(而不仅仅是相同的值)addlistener.

如果fcn的所有监听器函数prop被移除。

用例

function my_listener (h, dummy, p1)
  fprintf ("my_listener called with p1=%s\n", p1);
endfunction

c = {@my_listener, "my string"};
addlistener (gcf, "position", c);
dellistener (gcf, "position", c);

详见: addlistener.

广告

这两个函数的使用示例可能是

x = 0:0.1:10;
hg = hggroup ();
h = plot (x, sin (x), "color", [1, 0, 0], "parent", hg);
addproperty ("linestyle", hg, "linelinestyle", get (h, "linestyle"));
addlistener (hg, "linestyle", @update_props);
hold on
plot (x, cos (x), "color", [0, 1, 0], "parent", hg);

function update_props (h, d)
  set (get (h, "children"), "linestyle", get (h, "linestyle"));
endfunction

这增加了一个linestyle属性到hggroup并将其值的任何更改传播给该组的孩子。这个linkprop函数可以用来将上面的简化为

x = 0:0.1:10;
hg = hggroup ();
h1 = plot (x, sin (x), "color", [1, 0, 0], "parent", hg);
addproperty ("linestyle", hg, "linelinestyle", get (h, "linestyle"));
hold on
h2 = plot (x, cos (x), "color", [0, 1, 0], "parent", hg);
hlink = linkprop ([hg, h1, h2], "color");
 
: hlink = linkprop (h, "prop")
: hlink = linkprop (h, {"prop1", "prop2", …})

链接图形对象属性,以便将其中一个属性的更改传播到其他属性。

输入h是要链接的图形句柄的向量。

prop链接单个属性时可以是字符串,也可以是多个属性的字符串元胞数组。在链接过程中,中的所有属性prop将最初设置为列表中第一个对象上存在的值h.

函数返回hlink它是描述链路的一个特殊对象。只要引用hlink存在时,图形对象之间的链接将处于活动状态。这意味着hlink必须保存在工作区变量、全局变量中,或者使用诸如setappdataguidata。若要取消链接属性,请执行clear hlink.

的使用示例linkprop

x = 0:0.1:10;
subplot (1,2,1);
h1 = plot (x, sin (x));
subplot (1,2,2);
h2 = plot (x, cos (x));
hlink = linkprop ([h1, h2], {"color","linestyle"});
set (h1, "color", "green");
set (h2, "linestyle", "--");

详见: linkaxes, addlistener.

广告
 
: linkaxes (hax)
: linkaxes (hax, optstr)

链接二维图的轴极限,使其中一个图的变化传播到其他图。

要链接的轴句柄作为第一个参数传递hax.

可选的第二个参数是一个字符串,用于定义要链接的轴限制。的可能值optstr

"x"

链接x轴

广告
"y"

链接y轴

广告
"xy" (default)

链接两个轴

广告
"off"

关闭链接

广告

如果未指定,则默认为链接X轴和Y轴。

链接时,中第一个轴的限制hax应用于列表中的其他轴。对任意一个轴的后续更改将传播到其他轴。

详见: linkprop, addproperty.

广告

这些函数用于许多基本图形对象。这个hggroupOctave函数创建的对象包含一个或多个图形对象,用于:

例如stem函数创建一个词干序列,其中每个hggroup的词干系列包含两个线对象,表示词干的主体和头部。这个ydata的属性hggroup茎序列的表示茎的头部,而茎的主体位于基线和该值之间。例如

h = stem (1:4)
get (h, "xdata")
⇒ [  1   2   3   4]'
get (get (h, "children")(1), "xdata")
⇒ [  1   1 NaN   2   2 NaN   3   3 NaN   4   4 NaN]'

显示了xdatahggroupstem系列对象和基础线的。

此类组对象的基本属性是,它们从一个或多个链接的对象组成hggroup,并且这些组的某些属性的更改会传播到该组的其他成员。然而,组成员的某些属性仅适用于当前成员。

此外,组的成员还可以通过回调函数链接到其他图形对象。例如的基线barstem函数是一个线对象,其长度和位置会根据相应hggroup元素的变化自动调整。


版权所有 © 2024-2025 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号-2