Main Content

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

yyaxis

创建具有两个 y 轴的图

说明

示例

yyaxis left 激活当前坐标区中与左侧 y 轴关联的一侧。后续图形命令的目标为左侧。如果当前坐标区中没有两个 y 轴,此命令将添加第二个 y 轴。如果没有坐标区,此命令将首先创建坐标区。

yyaxis right 激活当前坐标区中与右侧 y 轴关联的一侧。后续图形命令的目标为右侧。

示例

yyaxis(ax,___) 指定 ax 坐标区(而不是当前坐标区)的活动侧。如果坐标区中没有两个 y 轴,此命令将添加第二个 y 轴。指定坐标区作为第一个输入参数。使用单引号将 'left''right' 引起来。

示例

全部折叠

创建左右两侧都有 y 轴的坐标区。基于左侧 y 轴绘制一组数据的图。然后使用 yyaxis right 激活右侧,使后续图形函数作用于该侧。基于右侧 y 轴绘制第二组数据的图,并为右侧 y 轴设置范围。

x = linspace(0,10);
y = sin(3*x);
yyaxis left
plot(x,y)

z = sin(3*x).*exp(0.5*x);
yyaxis right
plot(x,z)
ylim([-150 150])

Figure contains an axes object. The axes object contains 2 objects of type line.

创建具有两个 y 轴的图,并为每一侧添加标题和轴标签。

从示例文件 accidents.mat 加载矩阵 hwydata。基于左侧 y 轴和 hwydata 中的第五列数据创建一个散点图。添加标题和轴标签。

load('accidents.mat','hwydata')
ind = 1:51;
drivers = hwydata(:,5);
yyaxis left
scatter(ind,drivers)
title('Highway Data')
xlabel('States')
ylabel('Licensed Drivers (thousands)')

Figure contains an axes object. The axes object with title Highway Data, xlabel States, ylabel Licensed Drivers (thousands) contains an object of type scatter.

基于右侧 y 轴和 hwydata 中的第七列数据创建第二个散点图。然后为右侧 y 轴添加标签。

pop = hwydata(:,7);
yyaxis right
scatter(ind,pop)
ylabel('Vehicle Miles Traveled (millions)')

Figure contains an axes object. The axes object with title Highway Data, xlabel States, ylabel Vehicle Miles Traveled (millions) contains 2 objects of type scatter.

使用 hold on 命令基于左侧 y 轴绘制两个线条。

x = linspace(0,10);
yl1 = sin(x);
yl2 = sin(x/2);
yyaxis left
plot(x,yl1)
hold on
plot(x,yl2)

基于右侧 y 轴绘制两个线条。hold 命令同时影响左侧和右侧 y 轴,因此您不需要再次发出此命令。完成绘图后,关闭 hold

yr1 = x;
yr2 = x.^2;
yyaxis right
plot(x,yr1)
plot(x,yr2)
hold off

通过激活左侧并使用 cla 命令来清除左侧。

yyaxis left
cla

通过将色序设置为您想使用的两种颜色,为坐标区的每侧指定颜色方案。从 R2019b 开始,可以使用 colororder 函数设置色序。然后,基于左侧 y 轴和右侧 y 轴分别绘制两个线条。添加一个图例。

colororder({'b','m'})

yyaxis left
y = [1 2; 3 4];
plot(y)

yyaxis right
z = [4 3; 2 1];
plot(z)
legend

Figure contains an axes object. The axes object contains 4 objects of type line.

通过设置坐标区每侧的色序来控制各个绘图颜色。

基于左侧坐标轴绘制三组条形图。通过将左侧的色序设置为默认色序,为每个条形序列设置不同的颜色。

yyaxis left
bar(magic(3));
colororder('default')

基于右侧坐标轴绘制三个散点图。通过将色序设置为一个包含颜色名称的数组,为每个散点图使用不同颜色。您也可以使用 RGB 三元组矩阵指定颜色。然后,添加一个图例。

yyaxis right
scatter([1 2 3],[2 5 2],'filled')
hold on
scatter([1 2 3],[3 4 1],'filled')
scatter([1 2 3],[4 2 4],'filled')
hold off
colororder({'r','b','c'})
legend

Figure contains an axes object. The axes object contains 6 objects of type bar, scatter.

从 R2019b 开始,您可以使用 tiledlayoutnexttile 函数显示分块图。调用 tiledlayout 函数以创建一个 2×1 分块图布局。调用 nexttile 函数以创建坐标区对象 ax1ax2。通过指定 ax1 作为 yyaxis 的第一个输入,在顶部坐标区中添加第二个 y 轴。如果不指定坐标区,yyaxis 将向当前坐标区添加第二个 y 轴。

x = linspace(1,10);
tiledlayout(2,1)

% Top plot
ax1 = nexttile;
yyaxis(ax1,'left')
plot(ax1,x,sin(x))
yyaxis(ax1,'right')
plot(ax1,x,exp(x))

% Bottom plot
ax2 = nexttile;
plot(ax2,1:10)

Figure contains 2 axes objects. Axes object 1 contains an object of type line. Axes object 2 contains an object of type line.

输入参数

全部折叠

目标坐标区,指定为 Axes 对象。如果您不指定 Axes 对象,则 yyaxis 使用当前坐标区。

局限性

  • 使用两个 y 轴时,您不能:

    • 旋转坐标区(仅适用于二维视图)。

    • 固定注释。

    • 使用 copyobj 复制坐标区对象。

提示

  • 要确定坐标区的哪一侧处于活动状态,请查询 Axes 对象的 YAxisLocation 属性。当左侧处于活动状态时,此属性设置为 'left';当右侧处于活动状态时,此属性设置为 'right'。有两个 y 轴的 Axes 对象的 YAxisLocation 属性为只读属性。

  • 要清除活动侧,请使用 cla。要清除坐标区的两侧并删除右侧 y 轴,请使用 cla reset。也可以通过将 Axes 对象的 NextPlot 属性设置为 'replaceall',等到执行下一个绘图命令时再清除坐标轴的两侧并删除右侧 y 轴。

  • Axes 对象的 Children 属性只包含活动侧的子级。要访问两侧的所有子级,请使用 allchild 函数。

算法

全部折叠

网格线

网格线对应于左侧 y 轴上的刻度线位置。

颜色和线型

与特定侧的坐标区关联的绘图使用的颜色与该侧的 y 轴相同。如果某一侧包含多个线条,它们将按顺序循环使用线型。左侧 y 轴使用 Axes 对象的色序中的第一个颜色,右侧 y 轴使用第二个颜色。

如果您为包含图形的 Axes 对象添加第二个 y 轴,则现有图形和左侧 y 轴不会改变颜色。右侧 y 轴使用色序中的下一个颜色。

轴属性

y 轴有关的坐标区属性有两个值。但是,MATLAB® 只允许访问活动侧的值。例如,如果左侧处于活动状态,则 Axes 对象的 YLim 属性包含左侧 y 轴的范围。不过,如果右侧处于活动状态,则 YLim 属性包含右侧 y 轴的范围。

例外情况是 Axes 对象的 YAxis 属性包含一个数组,其中有两个标尺对象(每个 y 轴一个)。您可以使用标尺来访问每个 y 轴,无需考虑活动侧。有关示例,请参阅 修改包含两个 y 轴的图形的属性

版本历史记录

在 R2016a 中推出