2011-08-28 7 views
20

Jak mogę oznaczyć każdy z tych linii oddzielnie:Jak etykietować różne krzywe w Mathematica?

Plot[{{5 + 2 x}, {6 + x}}, {x, 0, 10}] 

enter image description here

+3

możliwe duplikat [? Możliwe umieścić wyrażenie równanie w pobliżu jego graficznej reprezentacji] (http://stackoverflow.com/q/1740305/211232) – WReach

Odpowiedz

34

Jest jakiś ładny kod, który pozwala, aby to zrobić dynamicznie an answer do How to annotate multiple datasets in ListPlots.

Jest też LabelPlot polecenie zdefiniowane w uwadze technicznej Labeling Curves in Plots

Oczywiście, jeśli nie masz zbyt wiele obrazów sprawiają, to nie jest trudne, aby ręcznie dodać etykiety w użyciu Epilog, na przykład

fns[x_] := {5 + 2 x, 6 + x}; 
len := Length[fns[x]]; 

Plot[Evaluate[fns[x]], {x, 0, 10}, 
Epilog -> Table[Inset[ 
    Framed[DisplayForm[fns[x][[i]]], RoundingRadius -> 5], 
    {5, fns[5][[i]]}, Background -> White], {i, len}]] 

outputa

W rzeczywistości, można zrobić coś podobnego z Locators który pozwala przenieść th Etykiety e tam, gdzie chcesz:

DynamicModule[{pos = Table[{1, fns[1][[i]]}, {i, len}]}, 
LocatorPane[Dynamic[pos], Plot[Evaluate[fns[x]], {x, 0, 10}], 
    Appearance -> Table[Framed[[email protected][fns[x][[i]]], 
        RoundingRadius -> 5, Background -> White], {i, len}]]] 

w powyższym zrobiłem lokalizatory przybrać formę etykiety, chociaż możliwe jest również, aby mieć Epilog takiego powyżej mają niewidzialne lokalizatory które kontrolują pozycje. Lokalizatory mogą być również ograniczone (używając drugiego argumentu z Dynamic) do odpowiednich krzywych ... ale to naprawdę nie jest konieczne.

Jako przykład powyższego kodu z funkcji z etykietami przenoszone ręcznie:

fns[x_] := {Log[x], Exp[x], Sin[x], Cos[x]}; 

four functions

+4

+1 Nicea pomysł, aby użyć 'Locators'! –

+9

+1. Może nie być * konieczne *, aby ograniczać lokalizatory do linii, ale jest to całkiem fajne. Spróbuj zmienić wyrażenie 'Dynamiczny' na' Dynamiczny [pos, (pos = MapIndexed [{##} /. {{X_, y_}, {i _}}:> {x, fns [x] [[i]]} &, #]) &] '. – WReach

+2

@WReach: Jesteś typem zainteresowanego czytelnika, dla którego opuściłem to ćwiczenie! Twój kod działa dobrze. – Simon

6

Można wstawić legendy w swojej działce ładując pakiet

<<PlotLegends`; 
Plot[{5+2 x,6+x},{x,0,10}, 
    PlotLegend->{"5+2x","6+x"},LegendShadow->None, 
    LegendPosition->{0.3,-0.5},LegendSpacing->-0,LegendSize->0.5] 
PlotLegends

enter image description here


Jednakże, pozwólcie mi również zauważyć moją niechęć do tego pakietu, przede wszystkim dlatego, że jest bardzo nieintuicyjny, obarczony zbyt wieloma opcjami i nie zapewnia czystego doświadczenia zaraz po wyjęciu z pudełka, jak większość funkcji Mathematica. Będziesz miał trochę do zrobienia z opcjami, aby uzyskać to, co chcesz. Jednak na wykresach i wykresach, w których chcesz legendy, może się to przydać. Zobacz także komentarze do this answer i this question.

+0

Pakiet PlotLegends nie jest optymalny. Zobacz [komentarze do tej odpowiedzi] (http://stackoverflow.com/questions/6988983/how-to-annotate-multiple-datasets-in-listplots/6989679#6989679) i [to pytanie SO] (http: // stackoverflow.com/q/3463437/421225). – Simon

+1

@Simon: Wiem ... Miałem drugą część mojej odpowiedzi, którą usunąłem przed oknem 5 min, ponieważ nie chciałem przekazywać żadnych ocen. Oto, co powiedział: _ " Jednakże, pozwólcie mi również zauważyć moją niechęć do tego pakietu, przede wszystkim dlatego, że jest bardzo sprzeczny z intuicją, obarczony zbyt wieloma opcjami i nie zapewnia czystego doświadczenia zaraz po wyjęciu z pudełka, jak większość funkcji Mathematica. Będziesz miał trochę do zrobienia z opcjami, aby uzyskać to, czego chcesz. Jednak na wykresach i wykresach, w których chcesz legendy, może się to przydać. "_ – abcd

+0

Po przeczytaniu tego usunę tę odpowiedź odpowiedź. Jednak dodaj te dwa linki powyżej jako komentarz do pytania (zauważając również, że jest błędny). Być może wszystko, czego chce, to legenda, a ludzie mają sposoby na komplikowanie żądań. – abcd

11

Mathematica 9 oferuje teraz proste sposoby dołączania legend.

Plot[{{5 + 2 x}, {6 + x}}, {x, 0, 10}, PlotLegends -> "Expressions"]