wolfram mathematica - graficar - trazando leyendas en Mathematica
plot options mathematica (3)
A mí también me decepcionó la dificultad de hacer que PlotLegend funcione correctamente. Escribí mi propia función breve para hacer mis propias leyendas de figuras personalizadas:
makePlotLegend[names_, markers_, origin_, markerSize_, fontSize_, font_] :=
Join @@ Table[{
Text[
Style[names[[i]], FontSize -> fontSize, font],
Offset[
{1.5*markerSize, -(i - 0.5) * Max[markerSize,fontSize] * 1.25},
Scaled[origin]
],
{-1, 0}
],
Inset[
Show[markers[[i]], ImageSize -> markerSize],
Offset[
{0.5*markerSize, -(i - 0.5) * Max[markerSize,fontSize] * 1.25},
Scaled[origin]
],
{0, 0},
Background -> Directive[Opacity[0], White]
]
},
{i, 1, Length[names]}
];
Es flexible, pero no tan fácil de usar. "nombres" es una lista de cadenas para representar en la leyenda; "marcadores" es una lista con la misma longitud que los "nombres" de los objetos de gráficos que representan los marcadores de la trama o los gráficos para representar; "origen" es una lista de dos elementos con la posición horizontal y vertical absoluta de la esquina superior izquierda de la leyenda; "markerSize" es el número de puntos para escalar los marcadores; "fontSize" es el tamaño de fuente; "font" es el nombre de la fuente a usar. Aquí hay un ejemplo:
Plot[{x, x^2}, {x, 0, 2}, PlotStyle -> {Blue, Red},
Epilog -> makePlotLegend[
{x, x^2},
(Graphics[{#, Line[{{-1, 0}, {1, 0}}]}]) & /@ {Blue, Red},
{0.9, 0.3},
12,
12,
"Arial"
]
]
¿Cómo trazar leyendas para funciones sin usar el paquete PlotLegends?
Si está experimentando el comportamiento extraño descrito por James Cuando está tratando de usar ''Mostrar'' para combinar dos imágenes, entonces debe jugar con el uso de la función ''Superposición'' en lugar de ''Mostrar''.
Alternativamente, he encontrado que siempre que ambos gráficos tengan una leyenda, entonces ''Mostrar'' mostrará la imagen compuesta correctamente.
Si parece un poco tonto tener dos leyendas, entonces puedes eliminar el del segundo gráfico usando opciones como:
PlotLegend -> {},
LegendPosition -> {0.1, 0.1},
LegendSize -> 0.001,
LegendShadow -> None,
LegendBorder -> None
Esto crea una leyenda vacía e invisible, pero aún permite que los dos gráficos estén compuestos correctamente por ''Mostrar''.
También estaría muy interesado en una respuesta a esta pregunta.
Para decirte lo que está mal con PlotLegends: es terriblemente inestable y en muchos casos no funciona en absoluto.
Aquí hay un ejemplo donde PlotLegends se estropea por completo. La salida es de Mathematica 7.0:
Supongamos que hemos medido algunos puntos de datos correspondientes a una serie de funciones, y queremos mostrar qué tan bien se comparan con la función ideal, o tal vez qué tan bien coinciden con un ajuste calculado. ¡No hay problema! Simplemente mostraremos [] la trama suave junto con un ListPlot de los puntos de datos, ¿verdad?
Podría verse algo como esto:
Show[
Plot[{Sin[x], Sinh[x]}, {x, -Pi, Pi}],
ListPlot[Join[{#, Sin[#]} & /@ Range[-Pi, Pi, .5],
{#, Sinh[#]} & /@ Range[-Pi, Pi, .5]]]
]
Ahora nos gustaría poner una leyenda en la trama, para que los lectores sepan qué demonios están viendo. Es más fácil decirlo que hacerlo, señor! Agreguemos la PlotLegend al argumento []:
Show[
Plot[{Sin[x], Sinh[x]}, {x, -Pi, Pi}, PlotLegend -> {Sin[x], Sinh[x]}],
ListPlot[Join[{#, Sin[#]} & /@ Range[-Pi, Pi, .5],
{#, Sinh[#]} & /@ Range[-Pi, Pi, .5]]]
]
¡Esto se ve genial! Publicar de inmediato!
Para una funcionalidad tan básica y omnipresente, seguramente ha sido mucho trabajo encontrar una alternativa a PlotLegend que funcione. La mejor alternativa que he encontrado hasta ahora ha sido construir meticulosamente una lista de trazados, luego construir la leyenda a mano y finalmente mostrarla junto con la trama usando ShowLegend []. (Ver por ejemplo here ) Es posible, pero mucho trabajo.
Entonces, si alguien sabe de una solución alternativa para hacer que funcione PlotLegend, un paquete alternativo que funcione mejor, o simplemente una manera ordenada de obtener leyendas que se puedan automatizar fácilmente, ¡le estaría muy agradecido! Sin duda, haría la vida un poco más fácil.