如何在Matlab图中添加2列图例?

时间:2016-07-25 14:10:42

标签: matlab plot graph legend legend-properties

请考虑以下代码:

t=0:.01:(2*pi);
y=[sin(t);sin(t-pi/12);sin(t-pi/6);sin(t-pi/4)];
figure(1)
    clf
    subplot(6,1,5)
    plot(t,y)
    xlim([0 2*pi])
    legend('1','2','3','4')

它产生以下数字:

![enter image description here

有没有办法将图例更改为2列布局?所以它会是

  

--- 1 --- 3

     

--- 2 --- 4

而不是

  

--- 1

     

--- 2

     

--- 3

     

--- 4

因此图例边界不会穿过图形边界线。

我找到了gridLegend脚本,但我更喜欢直接编写代码。

2 个答案:

答案 0 :(得分:2)

MATLAB从 2018a版开始为图例中的多列引入了本机支持。只需在'NumColumns',desired_number命令的末尾添加legend()

在此处查看详细信息-https://www.mathworks.com/help/matlab/ref/legend.html?lang=en&s_tid=gn_loc_drop#bt6r30y

此外,图例条目的方向可以从上到下更改为从左到右。

  

默认情况下,图例沿每个项目从上到下排序   柱。要沿每行从左到右排序项目,   将“方向”属性设置为“水平”。

答案 1 :(得分:1)

你通常可以通过在第一个上面创建第二个不可见的轴来破解这种事情,如下所示:

t=0:.01:(2*pi);
y=[sin(t);sin(t-pi/12);sin(t-pi/6);sin(t-pi/4)];
figure
subplot(6,1,5)

plot(t,y)
xlim([0 2*pi])
l1 = legend('1', '2');
pos = l1.Position;
set(l1, 'Position', pos - [pos(3) 0 0 0]);
legend boxoff

ax2 = copyobj(gca, gcf);
set(ax2, 'visible', 'off', 'clipping', 'off')
kids = ax2.Children;
set(kids, 'visible', 'off', 'clipping', 'off')
set(ax2, 'children', kids([3:4 1:2]))
l2 = legend(ax2, '3', '4');
legend(ax2, 'boxoff')
legend boxoff

请注意,这是脆弱的(例如,不处理在我的MATLAB版本上调整大小的窗口)。