Matlab双列图例间距调整:如何调整图例项位置对齐对应分组标题
你可以通过获取图例内部的图形子对象,手动调整两列图例项的水平偏移量,实现和对应分组标题的对齐,修改后的完整代码如下:
% random variables a=rand(1,10); b=rand(1,10); c=ones(1,10)*0.7; d=ones(1,10)*0.2; figure; p1=plot(a,'o-r'); hold on p2=plot(b,'s-b'); p3=plot(c,'-.k'); p4=plot(d,'-.k'); lg=legend([p1 p2 p3 p4],'a val','b val','c limit','d limit'); lg.NumColumns=2; title(lg,'raw data values from experiments limitation values'); ylim([0 1.2]) % 新增以下代码调整图例项对齐 drawnow % 确保图例完全渲染 % 获取图例中的所有文本和线条子对象 lg_children = lg.Children; % 筛选出图例项的文本对象(4个对应4个图例) txt_objs = findobj(lg_children,'Type','text'); % 筛选出图例项的图标(线条/标记)对象 icon_objs = findobj(lg_children,'Type','line'); % 左列(a val、b val)向左偏移量,可根据实际显示效果微调 left_offset = -0.12; % 右列(c limit、d limit)向右偏移量,可根据实际显示效果微调 right_offset = 0.12; % 调整左列(索引2、4对应a val、b val,按Matlab图例对象排序规则) txt_objs(2).Position(1) = txt_objs(2).Position(1) + left_offset; txt_objs(4).Position(1) = txt_objs(4).Position(1) + left_offset; icon_objs(2).XData = icon_objs(2).XData + left_offset; icon_objs(4).XData = icon_objs(4).XData + left_offset; % 调整右列(索引1、3对应c limit、d limit) txt_objs(1).Position(1) = txt_objs(1).Position(1) + right_offset; txt_objs(3).Position(1) = txt_objs(3).Position(1) + right_offset; icon_objs(1).XData = icon_objs(1).XData + right_offset; icon_objs(3).XData = icon_objs(3).XData + right_offset;
如果偏移后整体图例宽度不够,可以额外调整lg.Position(3)属性增大图例宽度,避免内容被截断。left_offset和right_offset的数值可以根据你实际的图例标题长度、字体大小自行微调,达到最佳对齐效果。
内容的提问来源于stack exchange,提问作者Shiva
相关产品推荐
相关产品推荐

