请考虑以下代码:
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')
它产生以下数字:
有没有办法将图例更改为2列布局?所以它会是
--- 1 --- 3
--- 2 --- 4
而不是
--- 1
--- 2
--- 3
--- 4
因此图例边界不会穿过图形边界线。
我找到了gridLegend
脚本,但我更喜欢直接编写代码。
答案 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版本上调整大小的窗口)。