Main Content

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

对图的交互进行控制

您可以交互式探查和编辑绘图数据,以改善数据的视觉效果或显示有关数据的其他信息。可用的交互操作取决于坐标区的内容,但通常包括缩放、平移、旋转、数据提示、数据刷亮以及还原原始视图。

有些类型的交互可通过坐标区工具栏使用。将鼠标悬停在图区域上时,工具栏会显示在坐标区的右上角。

Sample axes toolbar

其他交互类型已内置于坐标区中,并可通过手势使用,例如拖动平移或滚动缩放。这些交互的控制与坐标区工具栏中交互的控制是分开的。

创建图时,可以通过多种方式控制可用的交互集:

在 R2018a 和之前的版本中,许多交互选项显示在图窗工具栏而不是坐标区工具栏上。此外,在以前的版本中,坐标区中没有内置任何交互。

显示或隐藏坐标区工具栏

要显示或隐藏坐标区工具栏,请将 AxesToolbar 对象的 Visible 属性相应设置为 'on''off'。例如,隐藏当前坐标区的工具栏:

ax = gca;
ax.Toolbar.Visible = 'off';

自定义坐标区工具栏

您可以使用 axtoolbaraxtoolbarbtn 函数自定义坐标区工具栏上的可用选项。

例如,为坐标区工具栏添加自定义状态按钮,以打开和关闭坐标区网格线。首先,创建一个名为 mycustomstatebutton.m 的程序文件。在该程序文件中:

  • 绘制随机数据图。

  • 使用 axtoolbar 函数为坐标区创建一个工具栏,其中包含放大、缩小和还原视图的选项。

  • 使用 axtoolbarbtn 函数向工具栏添加一个空状态按钮。返回 ToolbarStateButton 对象。

  • 通过设置 IconTooltipValueChangedFcn 属性,指定状态按钮的图标、工具提示和回调函数。此示例使用 grid 图标,此图标必须先作为图像文件保存到您的计算机路径中并命名为 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

Line plot with grid lines

启用或禁用内置交互

要控制是否在图中启用某内置交互集,请使用 disableDefaultInteractivityenableDefaultInteractivity 函数。有时 MATLAB® 会自动禁用内置交互。例如,对于包含特殊功能的图,或在实现某些回调(例如 WindowScrollWheelFcn 回调)时,可能会禁用内置交互。

自定义内置交互

大多数类型的坐标区都包括一组默认的与特定手势对应的内置交互。可用的交互取决于坐标区的内容。大多数笛卡尔坐标区包含以下交互:滚动缩放、悬停或点击显示数据提示,以及拖动平移(在二维视图中)或旋转(在三维视图中)。您可以将默认集替换为新的交互集,但不能访问或修改默认集中的任何交互。

要替换默认交互,请将坐标区的 Interactions 属性设为交互对象数组。从下表中选择兼容的交互对象组合。要从坐标区删除所有交互,请将该属性设置为空数组 ([])。

交互对象描述兼容的交互
panInteraction通过拖动操作在图中平移。regionZoomInteractionrotateInteraction 以外的全部交互
rulerPanInteraction通过拖动坐标轴对其进行平移。全部
zoomInteraction通过滚动或捏合手指进行缩放。全部
regionZoomInteraction通过拖动操作放大矩形区域。
(仅适用于二维笛卡尔图)
panInteractionrotateInteraction 以外的全部交互
rotateInteraction通过拖动图对其进行旋转。panInteractionregionZoomInteraction 以外的全部交互
dataTipInteraction通过悬停、单击或点击显示数据提示。全部

例如,创建一幅包含 1000 个散点的绘图。

x = 1:500;
y = randn(1,500);
y2 = 5*randn(1,500) + 10;
plot(x,y,'.',x,y2,'.')

Scatter plot displaying two sets of data using two colors

默认情况下,此绘图提供的交互支持图区域内的拖动平移。但由于该绘图包含大量密集的点,支持放大绘图特定区域的交互会更加有用。regionZoomInteraction 对象提供此功能。将当前坐标区的默认交互集替换为包括 regionZoomInteraction 对象的数组。

ax = gca;
ax.Interactions = [zoomInteraction regionZoomInteraction rulerPanInteraction];

现在,在绘图区域内拖动鼠标会定义一个需要放大的矩形目标区域。

The same scatter plot with a rectangle surrounding some points

自定义 App 的交互行为

您可以为 App 设计工具中的坐标区以及使用 uifigure 函数创建的图窗中的坐标区自定义坐标区交互的某些方面的行为。通过更改关联的 InteractionOptions 对象的属性值来自定义坐标区交互。

例如,在使用 uifigure 函数创建的图窗中自定义坐标区交互。修改坐标区支持的交互。将 PanSupported 属性指定为 "off" 以便坐标区不支持平移交互。

f = uifigure;
ax = uiaxes(f);
plot(ax,magic(4));
ax.InteractionOptions.PanSupported = "off";

坐标区工具栏不再包括平移 按钮,点击并拖动绘图不会平移坐标区视图。

Plot with axes toolbar showing all the default buttons excluding the Pan button

然后,将缩放交互约束为仅在 x 维度上进行。

ax.InteractionOptions.LimitsDimensions = "x";

现在,与 LimitsDimensions 属性相关联的所有缩放交互都约束到 x 维度。例如,启用坐标区的缩放模式。

zoom(ax,"on")
然后,在图中拖动、滚动或点击以进行缩放。InteractionOptionsLimitsDimensions 属性将缩放约束到 x 维度上进行。

Selection range along x-axis for zooming

放大坐标区后,还原坐标区的视图。在还原视图之前,请查询用于还原视图的默认 x 坐标轴范围。

restoreX = ax.InteractionOptions.RestoredXLimits
restoreX =`

     1     4

自定义 x 轴还原范围。

ax.InteractionOptions.RestoredXLimits = [2 3];

然后,点击坐标区工具栏中的还原视图 按钮。x 轴的范围是 [2 3]

Plot with x-axis limits [2 3]

另请参阅

函数

属性

相关主题