一种方法是调整图例的纵横比:
set(h,'PlotBoxAspectRatioMode','manual');
set(h,'PlotBoxAspectRatio',[1 0.8 1]);
(默认为 [1 1 1])。
您还可以使用各种图例元素的精确定位。如果 h 是您的图例的句柄:
hc = get(h,'Children');
现在,hc 的长度将是图例中项目数的 3 倍。
hc(1) 是标记,hc(2) 是行,hc(3) 是文本。
(后续项目依此类推)。
hc(1) 将有一个条目 YData(垂直位置,单个值),hc(2) 也有 YData(垂直位置 - 两个相同值的向量),hc(3) 包含 Position - @ 987654333@ 向量。这三个的 Y 值应该相同。
获取 y 位置:
yd = zeros(length(hc)/3,1);
for n = 1:length(yd);
yd(n) = get(hc(1+(n-1)*3),'YData');
end
假设您的图例中没有任何超过一行的文本,yd 应该是等间距的。定义您选择的新间距,yd2。
设置新位置:
% markers
for n = 1:length(yd2)
set(hc(1+(n-1)*3),'YData',yd2(n));
end
% lines
for n = 1:3
set(hc(2+(n-1)*3),'YData',[yd2(n),yd2(n)]);
end
% text
for n = 1:3;
pos = get(hc(3+(n-1)*3),'Position');
pos(2) = yd(n);
set(hc(3+(n-1)*3),'Position',pos);
end
问题 - 这会移动所有文本和标记,但不会更改边框。如果尝试进行微调,最简单的方法是首先定义图例的最终大小/位置,然后重新定位/调整其中的元素以适应口味。
此外,您可能会发现,在写出图像时,MATLAB 会重新绘制图像,重置您的调整。有关这方面的信息,请参阅 Undocumented MATLAB 上的 this blog post。