2013-03-08 16 views
7

Ich erzeuge ein Diagramm für mehrere Datensätze. Jeder der Datensätze sollte eine eigene Legende erhalten, die griechische Buchstaben, Plotmath-Symbole oder Sub- und Superscribion ​​enthalten kann. Ich möchte die Legendentexte in einer Schleife erzeugen.Verwenden Sie Sub-/hochgestellte und Sonderzeichen in Legendentexten von R-Plots

Bquote funktioniert gut, wenn nur ein Legendentext vorhanden ist. Wenn ich versuche, additinal Legende Texte hinzufügen, die plotmath-commads verloren, ...

x <- 0:10 
y1 = x * x 
y2 = x * 10 

plot (1,1, type="n", xlab=bquote(Omega), ylab="Y", las=1, xlim=range(x), ylim=range(y1, y2)) 
lines(x, y1, col=1, pch=1, type="b") 
lines(x, y2, col=2, pch=2, type="b") 

# generate legend texts (in a loop) 
legend_texts = c(
    bquote(Omega^2) 
    , bquote(Omega%*%10) 
) 
# Using a single bquote works fine: 
#legend_texts = bquote(Omega^2) 
#legend_texts = bquote(Omega%*%10) 

legend(
    "topleft" 
    , legend = legend_texts 
    , col = c(1:2) 
    , pch = c(1:2) 
    , lty = 1 
) 
+1

+1 für reproduzierbares Beispiel! – A5C1D2H2I1M1N2O1R2T1

Antwort

4

Change "legend_texts" zu:

# generate legend texts (in a loop) 
legend_texts = c(
    as.expression(bquote(Omega^2)) 
    , as.expression(bquote(Omega%*%10)) 
) 

Von der Hilfeseite für ?legend, die "Legende" Argument wird beschrieben als:

ein Zeichen oder ein Expressionsvektor. der Länge ≥ 1 in der Legende erscheinen. Andere Objekte werden von as.graphicsAnnot gezwungen.

Ausgang:

enter image description here

+0

Kleinere Legasthenie hier. Die Hilfeseite liest "Expressionsvektor", nicht "Vektor der Ausdrücke". :) – A5C1D2H2I1M1N2O1R2T1

6

Try this:

legend_texts = expression(
    Omega^2, Omega*10) 

legend(
    "topleft" 
    , legend = legend_texts 
    , col = c(1:2) 
    , pch = c(1:2) 
    , lty = 1 
    ) 

Ich konnte nicht sagen, ob Sie Omega^10 oder Omega*10 oder Omega%*%10 wollte, aber sie alle akzeptabel plotmath Ausdrücke erzeugen würde.

enter image description here

+0

Besser als meine Verwendung von 'as.expression' immer und immer wieder. +1 – A5C1D2H2I1M1N2O1R2T1

+0

Wenn Sie die Funktion 'Ausdruck' verwenden, erstellen Sie einen Vektor mit mehreren Werten, indem Sie die Elemente durch Kommas trennen. –

+0

danke. Ich lese gerade die Hilfeseite erneut und kam zu dieser Schlussfolgerung. :) – A5C1D2H2I1M1N2O1R2T1