Ich versuche, mit PlotLegend in Mathematica v8 eine Liste von Funktionen mit einer Legende zu zeichnen. Als einfacher Test, der zeigt, was ich zu tun versuche.
<<PlotLegends`
test = Table[f[x], {f, {Sin, Cos, Tan, Log, Exp}}]
Plot[test, {x, 0, 1}, PlotRange -> Full, Axes -> {True, False},
PlotStyle -> Thick, AxesOrigin -> {0, 0},
PlotLegend -> {"Sin", "Cos", "Tan", "Log", "Exp"},
LegendPosition -> {0, -0.5}, LegendShadow -> None]
Gibt als Ausgabe
{Sin[x], Cos[x], Tan[x], Log[x], E^x}
Wenn ich die Tabelle jedoch explizit in den Plot-Befehl einfüge, erhalte ich die richtige Legende.
Plot[{Sin[x], Cos[x], Tan[x], Log[x], Exp[x]}, {x, 0, 1},
PlotRange -> Full, Axes -> {True, False}, PlotStyle -> Thick,
AxesOrigin -> {0, 0},
PlotLegend -> {"Sin", "Cos", "Tan", "Log", "Exp"},
LegendPosition -> {0, -0.5}, LegendShadow -> None]
Für meine eigentliche Anwendung füge ich eine Liste von Funktionen in einer Do - Schleife zusammen, so dass der letztgenannte Plot - Befehl nicht ideal ist.
Irgendwelche Vorschläge würden sehr geschätzt werden.
Prost, Mike
Antworten:
5 für die Antwort № 1Ersetzen Plot[test, ...]
mit Plot[Evaluate@test, ...]
.
Das Problem ist, dass Plot das erste Argument nicht bewertet und nur bei der Berechnung von Punkten auswertet. Daher wird beim Bestimmen der Beschriftungen nur ein einziges Argument angezeigt test
, keine Liste und gibt daher nur ein Etikett aus. Evaluate@test
Weist Mathematica an, auszuwerten test
bevor Sie es weitergeben Plot
obwohl Plot
ist so definiert, dass das Argument nicht bewertet wird. Auf diese Weise sieht Plot die Liste, in der Sie gespeichert haben test
und kann mehrere Labels erzeugen.