Ci sono diverse cose che erano necessarie qui , ma il principale è ottenere le 3 espressioni in un formato adatto - semplicemente c
-le loro insieme non funziona. Per questo, creo un elenco di espressioni e successivamente la funzione sapply
nella funzione as.expression
per ottenere un "vettore di espressioni".
Uso la funzione plotmath atop
per ottenere una "interruzione di riga"; questo pone i suoi argomenti, uno sopra l'altro.
per ottenere la parte 0,95
, che presumo è solo 0.95
ma nel vostro locale, sulla mia macchina ho dovuto usare la funzione di layout *
con un letterale ","
di giustapporre l'0
e 95
. Se questo è solo per scrivere un decimale quindi in altre localizzazioni che usano .
come separatore decimale, questo non sarebbe necessario. Sospetto che nelle tue impostazioni locali, puoi utilizzare la seconda versione di seguito ma scrivendo [0,99]
anziché [0.99]
, ma non lo so.
Se hai appena messo
bquote(atop(foo_0.99^normal ==, .round(bar, 4)))
si era appena ottiene un errore:
> bquote(atop(foo_0.99^normal ==, .round(bar, 4)))
Error: unexpected ',' in "bquote(atop(foo_0.99^normal ==,"
Questo è perché il lato destro della ==
funzione/operatore non è presente. Dato che non vuoi nulla dopo lo ==
(sulla linea corrente!), Devi usare qualcosa che non aggiunge spazio extra ma fornisce un lato destro valido per ==
. Qui uso phantom()
che funge da segnaposto ma non lascia spazio (dato che non fornisco argomenti). Ma puoi anche usare == ""
, sostituendo ""
per phantom()
.
Per ottenere il testo dello stesso colore della riga, utilizzare l'argomento text.col
.
Qui è la cosa in pieno con tutte le vostre richieste soddisfatti (in qualche modo):
test <- 10:1
dummy1 <- 0.004323423
dummy2 <- 0.054
dummy3 <- 0.032
plot(test, 1:10)
## list of expressions
exprs <-
list(bquote(atop(Qua_0 * "," * 99^normal == phantom(), .(round(dummy1, 4)))),
bquote(atop(Qua_0 * "," * 95^normal == phantom(), .(round(dummy2, 4)))),
bquote(atop(Qua_0 * "," * 99^t == phantom(), .(round(dummy3, 4)))))
## fudge to get them as an expression vector
exprs <- sapply(exprs, as.expression)
cols <- c("red", "black", "darkgreen")
legend("topright", legend = exprs, bty = "n", lwd = 2, cex = 1, col = cols,
lty=c(1,3,5), text.col = cols)
Sembra che si sta utilizzando il LaTeX _
per ottenere apice. Nel diagramma è necessario [ ]
. Noterai anche che non è così bello tipograficamente --- non c'è abbastanza spazio tra le voci della legenda, ma uno spazio tra gli elementi all'interno di una singola voce. Questo perché stiamo abusando di atop
per falsificare la nuova riga. Possiamo gestirlo utilizzando l'argomento y.intersp
di legend
. Aumentandolo a 2
si ottiene uno spazio sufficiente.
Combinando questo, vorrei fare le seguenti operazioni per soddisfare tutte le vostre esigenze:
plot(test, 1:10)
## list of expressions
exprs <-
list(bquote(atop(Qua[0.99]^normal == phantom(), .(round(dummy1, 4)))),
bquote(atop(Qua[0.95]^normal == phantom(), .(round(dummy2, 4)))),
bquote(atop(Qua[0.99]^t == phantom(), .(round(dummy3, 4)))))
## fudge to get them as an expression vector
exprs <- sapply(exprs, as.expression)
cols <- c("red", "black", "darkgreen")
legend("topright", legend = exprs, bty = "n", lwd = 2, cex = 1, col = cols,
lty=c(1,3,5), text.col = cols, y.intersp = 2)
Questo produce:
Partenza [** questa risposta **] (http://stackoverflow.com/a/15300449/1478381) a una delle mie domande da @agstudy. Penso che potrebbe aiutarti –
@ SimonO101 mh no, non riesco a capirlo ... –
@ SimonO101 Funziona perché la soluzione traccia due espressioni su linee diverse. Non è possibile farlo in una legenda poiché ogni voce deve trovarsi su una singola "linea" e può esistere solo un'espressione per voce della legenda. –