在matlab图形中压缩图例的大小或减小其行距

kfgdxczn  于 2023-10-23  发布在  Matlab
关注(0)|答案(1)|浏览(379)

我试图在matlab图中制作一个图例,占用更少的空间,特别是垂直尺寸。理想情况下,如果我能改变图例的行间距,这将解决这个问题,但我似乎找不到一种方法来做。
我在数学作业和谷歌上搜索过。我甚至试着从头开始“写”图例,但当我尝试导出到eps时,它不起作用。
在Matlab的图例中有没有控制行间间距的方法?可能是没有记录的东西

3phpmpom

3phpmpom1#

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

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)是文本。
(and对于后续项目)。
hc(1)将有一个条目YData(垂直位置,单个值),hc(2)也有YData(垂直位置-两个相同值的向量),hc(3)包含Position-[x y z]向量。所有这三个的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可以帮助您重新绘制图像,重置您的调整。请参阅未记录的MATLAB上的this blog post以了解有关信息。

相关问题