0

下面的代码生成一个绘图,其中两条线指向左侧 y 轴,一条线指向右侧 y 轴。两个图都有自己的图例,但我只想要一个图例列出所有 3 行。我也尝试将'y1','y2'字符串也放入第二个legend命令,但这没有成功。

line(x,y1,'b','LineWidth',2)

line(x,y2,'Color',[0,0.6,0.5],'LineWidth',2)

legend('y1','y2');

ax1 = gca;
ax2 = axes('Position',ax1.Position,'YAxisLocation','right', 'Color','none','YColor',[255,127,80]/256);
linkaxes([ax1,ax2],'x');

line(x,y3,'Parent',ax2,'LineWidth',2,'Color',[255,127,80]/256)

legend('y3')
4

1 回答 1

1

这是一个棘手的问题,因为图例以某种方式连接到轴。由于您将创建 2 个轴,因此将有 2 个图例。但是,有一个技巧可以实现您想要的。首先,在同一轴上绘制所有线,然后运行legend​​. 然后创建第二个轴,然后将第三条线移动到第二个轴。所以你的代码应该是这样的:

% line
line(x,y1,'b','LineWidth',2)
line(x,y2,'Color',[0,0.6,0.5],'LineWidth',2)
l3=line(x,y3,'LineWidth',2,'Color',[255,127,80]/256)

% legend
legend('y1','y2','y3');

% 2nd axes
ax1 = gca;
ax2 = axes('Position',ax1.Position,'YAxisLocation','right', 'Color','none','YColor',[255,127,80]/256);
linkaxes([ax1,ax2],'x');

% move l3 to 2nd axes
set(l3,'Parent',ax2);

如果你想使用'DisplayName',它意味着与line

line(x,y1,'Color','b','LineWidth',2,'DisplayName','y1');
line(x,y2,'Color',[0,0.6,0.5],'LineWidth',2,'DisplayName','y2');

legend('show');
于 2015-10-04T08:31:00.453 回答