2017-01-23 8 views
5

Мне нужен дополнительный текст в легенде, который не связан с графическими данными вместе с надписями легенд. Что-то вроде этого (это было сделано в OriginLab):Как добавить независимый текст в легенду сюжета MATLAB

enter image description here Следуя этой ссылке Add custom legend without any relation to the graph Я могу добавить текст с помощью plot(NaN,NaN,'display','add info here2', 'linestyle', 'none'). Но есть отступ в тексте:

enter image description here

Как избежать этого отступа? И есть ли более элегантный способ добавить текст, который не связан с легендой, вместе с надписями легенды?

+1

Не сказать, что это лучшее решение, но, возможно, вы можете найти его полезным как-то: [legtools] (https://github.com/StackOverflowMATLABchat/legtools/). –

ответ

4

Функция legend вернется в качестве второго выходного аргумента ручки для всех компонентов, которые составляют символы и текст в легенда. Поэтому вы можете построить «фиктивные» строки в качестве заполнителей в легенде, изменить порядок ручек при создании легенды, чтобы поместить текст туда, где вы хотите, и соответствующим образом изменить объекты легенды. Вот пример:

x = linspace(0, 2*pi, 100); 
hl = plot(x, [sin(x); cos(x); tan(x); nan(size(x))].');   % Add a line of NaNs 
axis([0 2*pi -4 4]); 
[~, objH] = legend(hl([1 2 4 3]), 'sin', 'cos', 'junk', 'tan'); % Reorder handles 
set(findobj(objH, 'Tag', 'junk'), 'Vis', 'off');   % Make "junk" lines invisible 
pos = get(objH(3), 'Pos');         % Get text box position 
set(objH(3), 'Pos', [0.1 pos(2:3)], 'String', 'also...'); % Stretch box and change text 

enter image description here

+0

Спасибо за ответ. Похоже, мне нужно. –

1

Вы можете просто добавить любой текст в любую точку участка таким образом:

txt1 = 'some information'; 
text(x1,y1,txt1) 

где x1, y1 - координаты.

enter image description here

Кстати функция text функция имеет много различных свойств (цвета, размера шрифта, выравнивание и т.д.).

+1

Спасибо за ответ. Но это нехорошее решение. В этой ситуации я должен скорректировать текст с легендой. Кроме того, есть проблема, если я хочу разместить текст между описаниями двух кривых, как показано в моем вопросе. Конечно, я могу создать легенду самостоятельно (но я должен знать цвета, стилистины и символы моих кривых. Так что это тяжелая работа). –

2

Вы можете использовать аннотации. Это не идеально, но с небольшими корректировками вы получите то, что хотите. Вот пример:

% somthing to plot: 
x = [0:0.1:5; 5:0.1:10].'; 
y = sin(x); 
% plot the real data: 
plot(x,y); 
hold on 
% make some space in the legend: 
Spacing_lines = 3; 
h = plot(nan(size(x,1),Spacing_lines)); 
hold off 
set(h,{'Color'},{'w'}); % clear the dummy lines 
% place the legend: 
hl = legend([{'lable1','lable2'} repmat({''},1,Spacing_lines)]); 
% add your text: 
annotation('textbox',hl.Position,'String',{'Some info';'in 2 lines'},... 
    'VerticalAlignment','Bottom','Edgecolor','none'); 

И от этого вы получаете:

txt 2 legend

+0

Спасибо за ответ. К сожалению, решение «гновиц» лучше. –

+0

@ АлександрКоровин Согласен :) – EBH

0

Я думаю, что самый простой способ это просто создать фиктивную функцию, построить его, но установить цвет = «нет» - то, как она будет отображаться только в легенде (если это вам нужно).

 Смежные вопросы

  • Нет связанных вопросов^_^