Main Content

为绘图准备图窗和坐标区

MATLAB 绘图函数的行为

如果没有图窗和坐标区,MATLAB® 绘图函数会创建新的图窗和坐标区,如果有,该函数会重用现有图窗和坐标区。在重用现有坐标区时,MATLAB

  • 从坐标区中清除图形对象。

  • 将大多数坐标区属性重置成默认值。

  • 根据新数据计算新的坐标区范围。

当绘图函数创建图形时,该函数能够:

  • 为绘图创建图窗和坐标区,并为特定图形设置必要的属性(当前图窗不存在时的默认行为)

  • 重用现有图窗和坐标区,根据需要清除和重置坐标区属性(图形存在时的默认行为)

  • 将新数据对象添加到现有图形,而不会重置属性(如果 holdon

NextPlot 图窗和坐标区属性控制 MATLAB 绘图函数的行为方式。

NextPlot 属性如何控制行为

MATLAB 绘图函数根据图窗和坐标区 NextPlot 属性值确定是否在绘制新图形之前添加、清除或清除并重置图窗和坐标区。低级对象创建函数不检查 NextPlot 属性。它们只是将新图形对象添加到当前图窗和坐标区。

下表总结了 NextPlot 属性的可能值。

NextPlot

图窗

坐标区

new

创建一个新图窗并将其用作当前图窗。

不是用于坐标区的选项。

add

在不清空或重置当前图窗的前提下添加新的图形对象。(默认值)

添加新图形对象,而不清除或重置当前坐标区。

replacechildren

在添加新对象前移除所有句柄未隐藏的坐标区对象。不重置图窗属性。等效于 clf

在添加新图形对象前移除所有未隐藏句柄的坐标区子对象。不要重置坐标区属性。等效于 cla

replace

在添加新对象前移除所有坐标区对象并将图窗属性重置为默认值。等效于 clf reset

在添加新对象前移除所有子对象并将坐标区属性重置为默认值。等效于 cla reset。(默认值)

绘图函数调用 newplot 函数获取适合坐标区的句柄。

默认场景

考虑默认场景,图窗 NextPlot 属性是 add,坐标区 NextPlot 属性是 replace。当您调用 newplot 时,它将执行以下操作:

  1. 查看当前图窗的 NextPlot 属性值(是 add)。

  2. 确定 MATLAB 可在当前图窗中绘图而不修改图窗。如果没有当前图窗,newplot 会创建一个,但不会重新检查其 NextPlot 属性。

  3. 查看当前坐标区的 NextPlot 属性值(是 replace)、从坐标区删除所有图形对象、将所有坐标区属性(除了 PositionUnits)重置为其默认值,并返回当前坐标区的句柄。如果没有当前坐标区,newplot 会创建一个,但不会重新检查其 NextPlot 属性。

  4. 从坐标区删除所有图形对象、将所有坐标区属性(除了 PositionUnits)重置为其默认值并返回当前坐标区的句柄。如果没有当前坐标区,newplot 会创建一个,但不会重新检查其 NextPlot 属性。

hold 函数和 NextPlot 属性

hold 函数可方便地访问 NextPlot 属性。当您想要将对象添加到图形,而同时不移除其他对象或重置属性,可使用 hold on

  • hold on - 将图窗和坐标区 NextPlot 属性设置为 add。线图会继续循环使用 ColorOrderLineStyleOrder 属性值。

  • hold off - 将坐标区 NextPlot 属性设置为 replace

使用 ishold 确定 holdon 还是 off

用户编写绘图函数的控制行为

MATLAB 提供了 newplot 函数以方便编写符合 NextPlot 属性设置的绘图函数。

newplot 检查 NextPlot 属性的值并根据这些值采取合适的操作。将 newplot 放在所有调用对象创建函数的函数开头。

当您的函数调用 newplot 时,newplot 首先查询图窗 NextPlot 属性。根据属性值,newplot 会采取下表中描述的操作。

图窗 NextPlot 属性值newplot 函数

不存在图窗

创建图窗,并使该图窗成为当前图窗。

add

使该图窗成为当前图窗。

new

创建新图窗,并使其成为当前图窗。

replacechildren

删除图窗的子对象(坐标区对象及其后代)并使该图窗成为当前图窗。

replace

删除图窗的子对象,将图窗属性重置为其默认值,并使该图窗成为当前图窗。

然后 newplot 检查当前坐标区的 NextPlot 属性。根据属性值,newplot 执行下表中描述的操作。

坐标区 NextPlot 属性值newplot 函数

当前图窗中没有坐标区

创建坐标区,并使其成为当前坐标区

add

使该坐标区成为当前坐标区,并返回其句柄。

replacechildren

删除坐标区的子对象并使该坐标区成为当前坐标区。

replace

删除坐标区的子对象、将坐标区的属性重置为其默认值并使该坐标区成为当前坐标区。