2017-01-23 33 views
5

Potrzebuję dodatkowego tekstu w legendzie, który nie jest powiązany z danymi graficznymi wraz z podpisami legendy. Coś takiego (to było robione w OriginLab):Jak dodać niezależny tekst do legendy działki MATLAB

enter image description here W następstwie tego linka Add custom legend without any relation to the graph mogę dodać jakiś tekst używając plot(NaN,NaN,'display','add info here2', 'linestyle', 'none'). Ale nie ma wcięcia w tekście:

enter image description here

Jak uniknąć tego wcięcia? Czy istnieje bardziej elegancka metoda dodawania tekstu, który nie jest związany z legendą wraz z legendami?

+1

Nie mówiąc, że jest to najlepsze rozwiązanie, ale być może uznasz to za użyteczne: [legtools] (https://github.com/StackOverflowMATLABchat/legtools/). –

Odpowiedz

4

Funkcja legend powróci jako drugi argument wyjściowy uchwyty do wszystkich elementów, które składają się symbole i tekstu w legenda. Możesz więc narysować linie "dummy" jako symbole zastępcze w legendzie, zmienić kolejność uchwytów podczas tworzenia legendy, aby umieścić tekst tam, gdzie chcesz, i odpowiednio zmodyfikować obiekty legendy. Oto przykład:

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

Dziękuję za odpowiedź. Wygląda na to, że potrzebuję. –

1

Można tylko dodać dowolny tekst w dowolnym punkcie działki w ten sposób:

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

gdzie x1, y1 - współrzędne.

enter image description here

Przy okazji funkcja text funkcji ma wiele różnych właściwościach (kolory, rozmiar czcionki, wyrównanie, itp).

+1

Dzięki za odpowiedź. Ale to nie jest dobre rozwiązanie. W tej sytuacji muszę dostosować tekst do legendy. Ponadto istnieje problem, jeśli chcę umieścić tekst między opisami dwóch krzywych, jak pokazano w moim pytaniu. Oczywiście mogę sam stworzyć legendę (ale muszę znać kolory, style linii i symbole moich krzywych, więc to jest ciężka praca). –

2

Możesz używać adnotacji. Nie jest idealny, ale z kilkoma dostosowaniami dostaniesz to, czego chcesz. Oto przykład:

% 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'); 

I od tego dostaniesz:

txt 2 legend

+0

Dzięki za odpowiedź. Niestety, rozwiązanie "gnovice" jest lepsze. –

+0

@AlexanderKorovin Zgadzam się :) – EBH

0

Myślę, że najprostszym sposobem jest po prostu stworzyć jakiś fikcyjny funkcji wykreślić ją jednak ustawić kolor = „none” - w ten sposób pokaże tylko w legendzie (jeśli jest to miejsce, gdzie go chciałeś).