对图的交互进行控制
您可以交互式探查和编辑绘图数据,以改善数据的视觉效果或显示有关数据的其他信息。可用的交互操作取决于坐标区的内容,但通常包括缩放、平移、旋转、数据提示、数据刷亮以及还原原始视图。
有些类型的交互可通过坐标区工具栏使用。将鼠标悬停在图区域上时,工具栏会显示在坐标区的右上角。

其他交互类型已内置于坐标区中,并可通过手势使用,例如拖动平移或滚动缩放。这些交互的控制与坐标区工具栏中交互的控制是分开的。
创建图时,可以通过多种方式控制可用的交互集:
在 R2018a 和之前的版本中,许多交互选项显示在图窗工具栏而不是坐标区工具栏上。此外,在以前的版本中,坐标区中没有内置任何交互。
显示或隐藏坐标区工具栏
要显示或隐藏坐标区工具栏,请将 AxesToolbar 对象的 Visible 属性相应设置为 'on' 或 'off'。例如,隐藏当前坐标区的工具栏:
ax = gca;
ax.Toolbar.Visible = 'off';
自定义坐标区工具栏
您可以使用 axtoolbar 和 axtoolbarbtn 函数自定义坐标区工具栏上的可用选项。
例如,为坐标区工具栏添加自定义状态按钮,以打开和关闭坐标区网格线。首先,创建一个名为 mycustomstatebutton.m 的程序文件。在该程序文件中:
绘制随机数据图。
使用
axtoolbar函数为坐标区创建一个工具栏,其中包含放大、缩小和还原视图的选项。使用
axtoolbarbtn函数向工具栏添加一个空状态按钮。返回ToolbarStateButton对象。通过设置
Icon、Tooltip和ValueChangedFcn属性,指定状态按钮的图标、工具提示和回调函数。此示例使用
图标,此图标必须先作为图像文件保存到您的计算机路径中并命名为 mygridicon.png。
运行程序文件时,点击该图标即可打开和关闭网格线。
function mycustomstatebutton plot(rand(5)) ax = gca; tb = axtoolbar(ax,{'zoomin','zoomout','restoreview'}); btn = axtoolbarbtn(tb,'state'); btn.Icon = 'mygridicon.png'; btn.Tooltip = 'Grid Lines'; btn.ValueChangedFcn = @customcallback; function customcallback(src,event) switch src.Value case 'off' event.Axes.XGrid = 'off'; event.Axes.YGrid = 'off'; event.Axes.ZGrid = 'off'; case 'on' event.Axes.XGrid = 'on'; event.Axes.YGrid = 'on'; event.Axes.ZGrid = 'on'; end end end

启用或禁用内置交互
要控制是否在图中启用某内置交互集,请使用 disableDefaultInteractivity 和 enableDefaultInteractivity 函数。有时 MATLAB® 会自动禁用内置交互。例如,对于包含特殊功能的图,或在实现某些回调(例如 WindowScrollWheelFcn 回调)时,可能会禁用内置交互。
自定义内置交互
大多数类型的坐标区都包括一组默认的与特定手势对应的内置交互。可用的交互取决于坐标区的内容。大多数笛卡尔坐标区包含以下交互:滚动缩放、悬停或点击显示数据提示,以及拖动平移(在二维视图中)或旋转(在三维视图中)。您可以将默认集替换为新的交互集,但不能访问或修改默认集中的任何交互。
要替换默认交互,请将坐标区的 Interactions 属性设为交互对象数组。从下表中选择兼容的交互对象组合。要从坐标区删除所有交互,请将该属性设置为空数组 ([])。
| 交互对象 | 描述 | 兼容的交互 |
|---|---|---|
panInteraction | 通过拖动操作在图中平移。 | 除 regionZoomInteraction 和 rotateInteraction 以外的全部交互 |
rulerPanInteraction | 通过拖动坐标轴对其进行平移。 | 全部 |
zoomInteraction | 通过滚动或捏合手指进行缩放。 | 全部 |
regionZoomInteraction | 通过拖动操作放大矩形区域。 (仅适用于二维笛卡尔图) | 除 panInteraction 和 rotateInteraction 以外的全部交互 |
rotateInteraction | 通过拖动图对其进行旋转。 | 除 panInteraction 和 regionZoomInteraction 以外的全部交互 |
dataTipInteraction | 通过悬停、单击或点击显示数据提示。 | 全部 |
例如,创建一幅包含 1000 个散点的绘图。
x = 1:500; y = randn(1,500); y2 = 5*randn(1,500) + 10; plot(x,y,'.',x,y2,'.')

默认情况下,此绘图提供的交互支持图区域内的拖动平移。但由于该绘图包含大量密集的点,支持放大绘图特定区域的交互会更加有用。regionZoomInteraction 对象提供此功能。将当前坐标区的默认交互集替换为包括 regionZoomInteraction 对象的数组。
ax = gca; ax.Interactions = [zoomInteraction regionZoomInteraction rulerPanInteraction];
现在,在绘图区域内拖动鼠标会定义一个需要放大的矩形目标区域。

自定义交互行为
您可以自定义坐标区交互的某些方面的行为。通过更改与坐标区的 InteractionOptions 属性关联的 CartesianAxesInteractionOptions 对象的属性值来自定义坐标区交互。
例如,自定义图窗中的坐标区交互。修改坐标区支持的交互。将 PanSupported 属性指定为 "off" 以便坐标区不支持平移交互。
f = figure;
ax = axes(f);
plot(ax,magic(4));
ax.InteractionOptions.PanSupported = "off";
坐标区工具栏不再包括平移
按钮,点击并拖动绘图不会平移坐标区视图。

然后,将缩放交互约束为仅在 x 维度上进行。
ax.InteractionOptions.LimitsDimensions = "x";
现在,与 LimitsDimensions 属性相关联的所有缩放交互都约束到 x 维度。例如,启用坐标区的缩放模式。
zoom(ax,"on")
CartesianAxesInteractionOptions 的 LimitsDimensions 属性将缩放约束到 x 维度上进行。
放大坐标区后,还原坐标区的视图。在还原视图之前,请查询用于还原视图的默认 x 坐标轴范围。
restoreX = ax.InteractionOptions.RestoredXLimits
restoreX =`
1 4
自定义 x 轴还原范围。
ax.InteractionOptions.RestoredXLimits = [2 3];
然后,点击坐标区工具栏中的还原视图
按钮。x 轴的范围是 [2 3]。
![Plot with x-axis limits [2 3]](interactionoptions_restorex.png)
另请参阅
函数
属性
- AxesToolbar 属性 | ToolbarPushButton 属性 | ToolbarStateButton 属性 | Axes 属性 | CartesianAxesInteractionOptions Properties