对图的交互进行控制
您可以交互式探查和编辑绘图数据,以改善数据的视觉效果或显示有关数据的其他信息。可用的交互操作取决于坐标区的内容,但通常包括缩放、平移、旋转、数据提示、数据刷亮以及还原原始视图。
有些类型的交互可通过坐标区工具栏使用。将鼠标悬停在图区域上时,工具栏会显示在坐标区的右上角。
其他交互类型已内置于坐标区中,并可通过手势使用,例如拖动平移或滚动缩放。这些交互的控制与坐标区工具栏中交互的控制是分开的。
创建图时,可以通过多种方式控制可用的交互集:
在 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];
现在,在绘图区域内拖动鼠标会定义一个需要放大的矩形目标区域。