绘制多轴但只有一个图例

Plot with multiple axes but only one legend

以下代码生成了一个图,其中两条线指向左侧 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')

这是一个棘手的问题,因为图例以某种方式连接到坐标轴。由于您将创建 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');