2016-07-28 33 views
2

Ich versuche, eine Gleichung wie "R^2 = 0,00575" in der Legende zu schreiben, und die Zahl 0,00575 kann automatisch in die Legende eingebettet werden. Hier ist ein Beispiel.Wie schreibe ich eine Gleichung mit einer Variablen in der Legende?

set.seed(100) 
x=rnorm(100) 
y=1:100 
fit=lm(y~x) 
R_squared=format(summary(fit)$r.squared,digits = 3) 
plot(x,y,type="l") 
legend("topleft",legend =expression(R^{2}~"="~R_squared),bty = "n") 

enter image description here

Wie die Figur zeigt, wird die Variable "R_squared" nicht in der Gleichung eingebettet. Gibt es eine Lösung? Vielen Dank.

Antwort

3

Für diese Aufgabe denke ich, es ist am besten zu tun parse(text=sprintf(...)). Sie können die R-Sprachsyntax in das Zeichenfolgenliteral codieren, das in einen R-Ausdruck unter Verwendung von parse() geparst wird, und die Formatspezifikationen sprintf() verwenden, um alle numerischen Werte oder Zeichenfolgenwerte, die in Variablen gespeichert sind, in den Ausdruck einzubetten.

set.seed(100L); 
x <- rnorm(100L); 
y <- 1:100; 
fit <- lm(y~x); 
R_squared <- format(summary(fit)$r.squared,digits=3L); 
plot(x,y,type='l'); 
legend('topleft',legend=parse(text=sprintf('paste(R^2,\' = %s\')',R_squared)),bty='n'); 

Eine alternative Syntax, die die Tatsache nutzt, dass == als ein einzelnes Gleichheitszeichen aufgetragen ist:

legend('topleft',legend=parse(text=sprintf('R^2 == %s',R_squared)),bty='n'); 

die plotmath documentation See.

plot

+1

Was für eine erstaunliche und wunderbare Antwort! Für mich weiß ich nicht einmal die "Parse" -Funktion. Ich danke dir sehr. –

+0

Hallo, nur noch eine Frage, was bedeutet '% s' in' text = sprintf ('R^2 ==% s', R_squared) '? Vielen Dank. –

+0

Es ist die Formatspezifikation für die Zeichenfolge, die durch den Wert von 'R_squared' ersetzt wird. – bgoldst

3

Sie können auch bquote verwenden:

set.seed(100L); 
x <- rnorm(100L); 
y <- 1:100; 
fit <- lm(y~x); 
R_squared <- format(summary(fit)$r.squared,digits=3L); 
plot(x,y,type='l'); 
legend('topleft',legend=bquote(R^{2} ~ "=" ~ .(R_squared)),bty='n'); 

Mehr Informationen über die teilweise Substitution von Ausdrücken mit bquote kann here gefunden werden, die die Funktion als definiert:

Ein analoges des LISP-Backquote-Makros. bquote zitiert sein Argument mit der Ausnahme, dass die eingepackten Begriffe.() in der angegebenen Umgebung ausgewertet werden.

+0

Brillante Antwort! Vielen Dank. Ich bin nicht vertraut mit "Ausdruck" in R. –

+1

Ich frage mich, warum Sie hinzufügen "." Vor "(R_squared)" in "legende = bquote (R^{2} ~" = "~. (R_squared)), bty = "n"). Gibt es ein Dokument darüber? Vielen Dank. –

+0

@YangYang, siehe bearbeitete Informationen, die der Antwort hinzugefügt wurden. – desc