2012-01-02 12 views
6

Quando disegno più funzioni come exp, 2^x, 3^x, è possibile generare un'etichetta per ciascuna funzione?Come generare automaticamente il nome della funzione in mathematica?

Il mio codice ora:

Plot[{Exp[x], 2^x, 3^x}, {x, -5, 2}, AspectRatio -> Automatic, PlotStyle -> {Red, Green, Blue}] 

Quello che voglio dire è di generare 3 etichette in questo caso per dire all'utente quale funzione che è.

Come ad esempio:

enter image description here

Come si fa a generare questo?

+0

Anche se utilizza Graphics [] invece di pianura, [questo] (http://stackoverflow.com/a/7547457/353410) potrebbe darti qualche idea –

+2

possibile duplicato di [Come posso etichettare le diverse curve in Mathematica?] (Http://stackoverflow.com/questions/7221315/how-do-i-belbel-different-curves-in -mathematica) – abcd

risposta

4

Forse questo funziona: Utilizzare Tooltip in Plot per generare un oggetto Graphics con descrizioni comandi. Poi riscrivere il tooltip per posizionare il testo desiderato nella posizione desiderata:

Plot[ 
[email protected]{Exp[x], 2^x, 3^x}, {x, -5, 2}, 
AspectRatio -> Automatic, 
PlotStyle -> {Red, Green, Blue}, 
PlotRange -> All, 
PlotRangePadding -> 1.1] /. 
{ 
Tooltip[{_, color_, line_}, tip_] 
:> 
{Text[Style[tip, 14], {.25, 0} + line[[1, -1]]], color, line} 
} 

Mathematica graphics

+0

Questo è un uso molto bello e intelligente del potere delle sostituzioni negli oggetti grafici simbolici. Di solito facciamo anche tutti i post in questo modo. –

1

Un modo è quello di utilizzare PlotLegends

(non mi piace troppo, ma è un modo semplice per fare quello che vuoi)

<< PlotLegends` 
Clear[x]; 
funs = {Exp[x], 2^x, 3^x}; 
legends = Map[[email protected][#, "TR", 12] &, funs]; 
Plot[[email protected], {x, -5, 2}, AspectRatio -> Automatic, 
PlotStyle -> {Red, Green, Blue}, PlotLegend -> legends] 

enter image description here

consultare la Guida per personalizzare la leggenda di più. Quanto sopra utilizza i valori predefiniti.

http://reference.wolfram.com/mathematica/PlotLegends/tutorial/PlotLegends.html

3

modo alternativo con Tooltip etichette che mostrano mentre il puntatore del mouse è ai grafici di funzioni:

Plot[[email protected]{Exp[x], 2^x, 3^x}, {x, -5, 2}, AspectRatio -> Automatic, 
              PlotStyle -> {Red, Green, Blue}] 
4

Non sono sicuro di quali sono le regole per l'aggiunta di un altro, risposta diversa per la stessa domanda . Ma ecco un altro modo diverso di farlo. Se dovessi aggiungere questo alla mia prima risposta, posso farlo.

È possibile aggiungere le etichette di testo, a mano, utilizzando i comandi di testo. Penso che sia migliore. Ecco un modo:

Clear[x]; 
funs = {Exp[x], 2^x, 3^x}; 
funNames = Style[#, 12] & /@ funs; 

(*the x-axis plot range used *) 
from = -5; to = 2; 

(* generate the coordinates at the end of the plot lines*) 
pos = Map[{to, #} &, funs /. x -> to]; 

(*generate the text labels *) 
text = Map[Text[#[[1]], #[[2]], {-1, 0}] &, Thread[{funNames, pos}]]; 

Plot il risultato finale (ha aggiunto un po 'di imbottitura per tracciare gamma in modo che le etichette aggiunte sono visti completamente)

Plot[funs, {x, from, to}, 
PlotRangePadding -> {1, 1}, 
PlotStyle -> {Red, Green, Blue}, 
PlotRange -> All, 
Epilog -> text 
] 

enter image description here

aggiornamento (1)

Sam ha chiesto sotto per un modo più semplice. Non sono sicuro ora. Ma un modo per rendere più facile l'utilizzo di questo metodo è quello di creare una funzione e quindi chiamare questa funzione una sola volta per generare le etichette di testo. Puoi mettere questa funzione dove metti tutte le altre funzioni che usi sempre e chiamala.

Qui c'è qualcosa: In primo luogo scrivere la funzione

(*version 1.1*) 

myLegend[funs_List,     (*list of functions to plot*) 
    x_,         (*the independent variable*) 
    from_?(NumericQ[#] && Im[#] == 0 &),(*the x-axis starting plot range*) 
    to_?(NumericQ[#] && Im[#] == 0 &) (*the x-axis ending plot range*) 
    ] := Module[{funNames, pos, text, labelOffset = -1.3}, 

    (*make label names*) 
    funNames = Style[#, 12] & /@ funs; 

    (*generated the coordinates at the end of the plot lines*) 
    pos = Map[{to, #} &, funs /. x -> to]; 

    (*generate the Text calls*) 
    text = Map[Text[#[[1]], #[[2]], {labelOffset, 0}] &, 
    Thread[{funNames, pos}]] 
    ]; 

E ora basta chiamare il sopra di ogni volta che si desidera tracciare con le etichette. Sarà solo 1-2 righe di codice in più.in questo modo:

Clear[x] 
from = -5; to = 2; 
funs = {Exp[x], 2^x, 3^x}; 

Plot[funs, {x, from, to}, PlotRangePadding -> {1, 1}, 
PlotStyle -> {Red, Green, Blue}, PlotRange -> All, 
Epilog -> myLegend[funs, x, from, to]] 

enter image description here

Ecco alcuni esempi:

enter image description here

È possibile modificarlo come si desidera.

+0

Sembra molto bello, ma per me è un po 'troppo complicato. C'è un modo semplice per farlo? Grazie ~ – sam

Problemi correlati