2016-07-28 2 views
2

J'essaye d'écrire une équation comme "R^2 = 0.00575" dans la légende, et le nombre 0.00575 peut être incorporé automatiquement dans la légende. Voici un exemple.Comment écrire une équation avec une variable dans la légende?

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

Comme le montre la figure, la "R_squared" variable est pas intégrée dans l'équation. y-a-t'il une solution? Merci.

Répondre

3

Pour cette tâche, je pense qu'il est préférable de faire parse(text=sprintf(...)). Vous pouvez coder la syntaxe du langage R dans le littéral de chaîne à analyser dans une expression R en utilisant parse() et utiliser les spécifications de format sprintf() pour incorporer les valeurs numériques ou de chaîne stockées dans les variables dans l'expression.

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'); 

Une syntaxe alternative qui tire parti du fait que == est tracée en un seul signe égal:

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

Voir la plotmath documentation.

plot

+1

Quelle merveilleuse réponse! Pour moi, je ne connais même pas la fonction 'parse'. Merci beaucoup. –

+0

Salut, juste une question de plus, que veut dire '% s' dans' text = sprintf ('R^2 ==% s', R_squared) '? Merci. –

+0

C'est la spécification de format pour la chaîne qui sera substituée par la valeur de 'R_squared'. – bgoldst

3

Vous pouvez également utiliser bquote:

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'); 

Plus d'informations sur la substitution partielle des expressions avec bquote se trouve here, qui définit la fonction:

Un analogue de la macro backquote LISP. bquote cite son argument sauf que les termes enveloppés dans.() sont évalués dans l'environnement spécifié.

+0

Brillante réponse! Merci. Je ne suis pas familier avec 'expression' dans R. –

+1

Je me demande pourquoi vous ajoutez' .' avant "(R_squared)" dans 'legend = bquote (R^{2} ~" = "~. (R_squared)), bty = 'n') '. Y a-t-il un document à ce sujet? Merci. –

+0

@YangYang, voir les informations modifiées ajoutées à la réponse. – desc