为matlab图例添加额外的空格(用于psfrag)

jlp*_*rla 6 matlab figures

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

从简单的数字开始;

h_plot = plot([0 1], [0 1]); 
h_legend = legend('A',0);
Run Code Online (Sandbox Code Playgroud)

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

h_plot = plot([0 1], [0 1]); 
h_legend = legend('A!!!!!!!!',0);
Run Code Online (Sandbox Code Playgroud)

!!!!!!!! 实际上是空格,它实际上存储为一个字符'A'.

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

  1. 一个明显的解决方案是:只需添加诸如"A !!!!!!!!!!!!"之类的文本 并用psfrag中的等式替换整个文本.但是,如果我触摸与Adobe 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);
Run Code Online (Sandbox Code Playgroud)
  1. 该legendflex文件看起来非常有趣,但我认为对空白缓冲的控制仅适用于图例本身的位置.

mar*_*sei 2

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

此处,该代码段使用 ASCII 代码 3 创建了 30 个空格。

h_plot = plot([0 1], [0 1]); 
h_legend = legend([ 'A' repmat(char(3),1,30) ],0);
Run Code Online (Sandbox Code Playgroud)

编辑

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

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

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

在此输入图像描述