Добавьте дополнительные пробелы в легенду Matlab (для использования с psfrag)

Как заполнить пробел в легенде 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. Однако если я коснусь файла с помощью Adobe Illustrator, то он преобразует текст в отдельные символы, что приводит к разрыву psfrag (см. Http://engineeringrevision.com/314/getting-illustrator-to-play-nicely-with-psfrag/ для пример). Поэтому мне действительно нужно иметь символ "А" в качестве строки.

  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 Файл выглядит очень интересно, но я думаю, что контроль над буферизацией пробелов был только для положения самой легенды.

3 ответа

Решение

Вы можете добавить любой из первых 32 кодов ascii (непечатаемые символы), чтобы создать пробел. Не уверен, что он будет работать с psfrag.

Здесь фрагмент кода создает 30 пробелов, используя код 3 ASCII.

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 возвращает старую строку в созданном файле изображения.

введите описание изображения здесь

Чтобы добавить дополнительный пробел к легенде, просто используйте

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

например:

legend( 'A{     }','b{    }' ) 

Функция 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]

Другие вопросы по тегам