6

如何在文本右侧的matlab图例上填充空格?我正在使用 psfrag(和 adobe illustrator 进行其他一些图表修改)的组合,并将用方程式替换图中的占位符文本。问题是它紧紧地限制了占位符文本上的框,而我想为我的方程式留出空间

从简单的图开始;

h_plot = plot([0 1], [0 1]); 
h_legend = legend('A',0);

我真正想要的间距是这样的

h_plot = plot([0 1], [0 1]); 
h_legend = legend('A!!!!!!!!',0);

在哪里!!!!!!!!!实际上是空格,它确实存储为一个字符“A”。

一些似乎不起作用的事情:

  1. 一个明显的解决方案是:只需添加诸如“A!!!!!!!!!!!!”之类的文本 并用我在 psfrag 中的方程式替换整个文本。但是,如果我使用 Adob​​e Illustrator 触摸文件,它会将文本转换为单个字符,这会破坏 psfrag(请参阅http://engineeringrevision.com/314/getting-illustrator-to-play-nicely-with-psfrag/例子)。所以我真的需要将'A'字符作为字符串。

  2. 另一种是尝试拉伸框,但改变位置或纵横比会相应地拉伸文本和线条。

例如,以下只是拉伸宽度

h_plot = plot([0 1], [0 1]); 
h_legend = legend('A',0);
leg_pos = get(h_legend,'position'); leg_pos(3) = leg_pos(3) * 2;
set(h_legend, 'position', leg_pos);
  1. legendflex文件看起来很有趣,但我认为对空白缓冲的控制仅针对图例本身的位置。
4

3 回答 3

4

要为图例添加额外的 withspace,只需使用

{          }  -> { "add how much space you wish between two brackets" }

例如:

legend( 'A{     }','b{    }' ) 
于 2016-06-26T13:02:18.103 回答
2

您可以添加前 32 个 ascii 代码(不可打印字符)中的任何一个来创建空格。不确定它是否可以与 psfrag 一起使用。

在这里,这段代码使用 ASCII 代码 3 创建了 30 个空格。

h_plot = plot([0 1], [0 1]); 
h_legend = legend([ 'A' repmat(char(3),1,30) ],0);

编辑

另一种可能。您可以使用图例中的手柄。在这里,将图例的文本从 10 个字符更改为 1 个字符不会修改图例框的大小。

[~,OBJH,~,~] = legend('0123456789');  % display a legend of 10 characters
set(OBJH(1), 'String', 'A');          % change its String to 1 character

-- 见注释:另存为.eps带回创建的图像文件中的旧字符串。

在此处输入图像描述

于 2014-08-26T00:27:02.823 回答
1

该函数legend有一个参数“位置”。您可以将向量传递给它,即

plot(1:10)
legend('Sometext', 'Location', [0.20, 0.1, 0.75, 0.25])

其中后一个向量可以解释为[Position_Right_in_pct, Position_Top_in_pct, Horizontal_Stretch, Vertical_Stretch]

于 2016-02-29T10:12:43.693 回答