【问题标题】:Compress the size or reduce the line spacing of a legend in matlab figures压缩matlab图形中图例的大小或减小行距
【发布时间】:2013-12-15 05:19:13
【问题描述】:

我正在尝试在 matlab 图中制作一个图例,它占用的空间更少,尤其是垂直尺寸。理想情况下,如果我可以更改图例的行间距,这将解决它,但我似乎无法找到解决方法。

我在 Mathworks 问题和 Google 中进行了搜索。我什至尝试从头开始“编写”图例,但是当我尝试导出为 eps 时它不起作用。

有没有办法控制Matlab图例中的行间距?可能是没有记录的东西?

【问题讨论】:

    标签: matlab plot legend matlab-figure


    【解决方案1】:

    一种方法是调整图例的纵横比:

    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

    【讨论】:

      猜你喜欢
      • 2020-07-09
      • 2013-09-11
      • 2018-10-14
      • 2017-04-24
      • 2011-08-18
      • 2013-01-09
      • 1970-01-01
      • 2018-04-29
      • 2018-11-05
      相关资源
      最近更新 更多