2013-03-08 7 views
7

I genera un grafico per più dataset. Ciascun set di dati dovrebbe ottenere la propria legenda, che potrebbe contenere lettere greche, simboli plotmath o sub e superscrizione. Mi piacerebbe generare i testi delle leggende in un ciclo.Usa sub/apice e caratteri speciali nei testi delle legende dei grafici R

Bquote funziona correttamente, se è presente un solo testo di legenda. Se cerco di aggiungere testi leggenda supplementare in, i plotmath-commads si perdono, ...

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 per esempio riproducibile! – A5C1D2H2I1M1N2O1R2T1

risposta

4

Change "legend_texts" a:

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

Dalla pagina di aiuto per ?legend, la "leggenda" argomento è descritto come:

un vettore di carattere o espressione. di lunghezza ≥ 1 per apparire nella legenda. Altri oggetti saranno forzati da as.graphicsAnnot.

uscita:

enter image description here

+0

Dislessia minore qui. La pagina di aiuto riporta "vettore di espressione", non "vettore di espressioni". :) – A5C1D2H2I1M1N2O1R2T1

6

Prova questo:

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

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

non ho potuto dire se si voleva Omega^10 o Omega*10 o Omega%*%10, ma tutti produrrebbe espressioni plotmath accettabili.

enter image description here

+0

Meglio del mio uso di "as.expression" più e più volte. +1 – A5C1D2H2I1M1N2O1R2T1

+0

Quando si utilizza la funzione 'expression', si crea un vettore di espressione a più valori separando gli elementi con virgole. –

+0

grazie. Ho appena riletto la pagina di aiuto e sono giunto a questa conclusione. :) – A5C1D2H2I1M1N2O1R2T1