2011-08-28 15 views
20

¿Cómo puedo etiquetar cada una de estas líneas por separado:¿Cómo etiqueto diferentes curvas en Mathematica?

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

enter image description here

+3

posible duplicado: [? Posible poner la expresión de la ecuación cerca de su representación gráfica] (http://stackoverflow.com/q/1740305/211232) – WReach

Respuesta

34

Hay algún código agradable que le permite hacer esto de forma dinámica en an answer a How to annotate multiple datasets in ListPlots.

También hay un comando LabelPlot se define en la Nota Técnica Labeling Curves in Plots

Por supuesto, si usted no tiene demasiadas imágenes para hacer, entonces no es difícil añadir manualmente las etiquetas en el uso de Epilog, por ejemplo,

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

de hecho, se puede hacer algo similar con Locators que le permite mover º e etiquetas dondequiera que quieren:

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}]]] 

En lo anterior hice los localizadores toman la forma de las etiquetas, aunque también es posible mantener una Epilog como la anterior y tienen localizadores invisibles que controlan las posiciones. Los localizadores también podrían estar limitados (usando el segundo argumento de Dynamic) a las curvas apropiadas ... pero eso no es realmente necesario.

Como un ejemplo del código anterior con las funciones con las etiquetas mover con la mano:

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

four functions

+4

1 Buena idea usar 'Locators'! –

+9

+1. Puede que no sea * necesario * restringir los localizadores a las líneas, pero es muy bueno hacerlo. Intente cambiar la expresión 'Dynamic' por' Dynamic [pos, (pos = MapIndexed [{##} /. {{X_, y_}, {i _}}:> {x, fns [x] [[i]]} &, #]) &] '. – WReach

+2

@WReach: ¡Eres el tipo de lector interesado al que dejé este ejercicio! Tu código funciona bien. – Simon

6

Puede insertar leyendas en su parcela cargando el PlotLegends paquete

<<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] 

enter image description here


Sin embargo, permítanme también notar mi aversión por este paquete, principalmente porque es extremadamente contrario a la intuición, cargado con demasiadas opciones y no proporciona una experiencia limpia desde el primer momento como la mayoría de las funciones de Mathematica. Tendrá que juguetear con las opciones para obtener lo que quiere. Sin embargo, en tramas y cuadros donde quieres una leyenda, esto puede ser útil. También vea los comentarios a this answer y this question.

+0

El paquete PlotLegends no es óptimo. Ver los [comentarios a esta respuesta] (http://stackoverflow.com/questions/6988983/how-to-annotate-multiple-datasets-in-listplots/6989679#6989679) y [esta pregunta SO] (http: // stackoverflow.com/q/3463437/421225). – Simon

+1

@Simon: Lo sé ... tuve una segunda parte de mi respuesta que eliminé antes de la ventana de 5 minutos porque no quería emitir ningún juicio. Esto es lo que dijo: _ " Sin embargo, permítanme también notar mi desagrado por este paquete, principalmente porque es extremadamente contrario a la intuición, cargado con demasiadas opciones y no proporciona una experiencia limpia desde el principio como la mayoría de las funciones de Mathematica. Tendrá que juguetear con las opciones para obtener lo que desea. Sin embargo, en tramas y gráficos donde quiera una leyenda, esto puede ser útil. "_ – abcd

+0

Eliminaré esta respuesta después de que haya leído mi respuesta. Sin embargo, agregue los dos enlaces anteriores como un comentario a la pregunta (también señalando que tiene errores). Quizás todo lo que quiere es una leyenda y la gente tiene formas de complicar las solicitudes. – abcd

11

Mathematica 9 ahora ofrece formas sencillas de incluir leyendas.

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