【问题标题】:Plot with multiple axes but only one legend绘制多个轴但只有一个图例
【发布时间】:2015-12-31 15:58:47
【问题描述】:

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

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')

【问题讨论】:

  • 看看动态图例:stackoverflow.com/questions/21685911/… - 我没有标记为重复,因为我不知道这是否能解决您的问题,但听起来可以。
  • @rayryeng 看起来它实际上可以解决我的问题,但我没有得到正确的语法。因为我没有使用(并且在这种情况下不能使用)plot-command,而是figure 和line,所以我不知道在我的情况下我必须在哪里添加'DisplayName',['y1','y2','y3']。我尝试将它添加到 figure-command,但 matlab 说“图形类中没有显示名称”。你能帮我解决这个问题吗?

标签: matlab plot legend-properties


【解决方案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');

【讨论】:

    猜你喜欢
    • 2018-01-28
    • 2020-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多