2013-03-08 11 views
8

C'è un modo per ottenere caratteri di controllo per le stringhe di testo, ad es. "\n" per newline valutato all'interno di un'espressione plotmath o viceversa. Nel seguente esempio, desidero combinare:Includere caratteri di controllo testo nelle espressioni plotmath

  • certo testo carattere
  • testo carattere di controllo (nuova riga)
  • sostituto un nome variabile
  • includono un'espressione plotmath

Dopo lettura this question Posso ottenere la maggior parte del modo lì con sostituto, ma il carattere newline non viene valutato. Ora sto girando a vuoto e mi confondo con plotmath, parse, bquote e substitute. Nel help page per plotmath si dice

caratteri di controllo (ad esempio \ n) non sono interpretati in stringhe di caratteri in plotmath, a differenza di tracciato normale.

Ciò significa che è davvero impossibile?

lab = "some data" 
form = "Exponential" 
x = 1:10 
y = x^2 


plot(x , y , type = "b") 
title(main = substitute(paste("Plot of " , phi , " of: " , lab , "\nFunctional form: " , form) , list(lab = lab , form = form)) , adj = 0) 

enter image description here

risposta

9

Come avrete capito plotmath non supporta a capo all'interno, ma è possibile utilizzare mtext con bquote, di scrivere ogni riga. Per esempio a creare un elenco di linee:

Lines <- list(bquote(paste("Plot of " , phi , " of: " , .(lab))), 
       bquote(paste("Functional form: " , .(form))) 

mtext(do.call(expression, Lines),side=3,line=1:0) 

enter image description here

+0

La soluzione funziona perfettamente! Grazie mille per aver attraversato il pantano di 'bquote' e le espressioni matematiche/di testo per me! +1 –

2

Per ragioni di completezza, ecco un'altra soluzione utilizzando Unicode e non espressioni (adattato da here e here):

plot(x, y, type="b") 
title(main=paste("Plot of \u03A6 of:", lab, "\nFunctional form:", form), adj=0) 

enter image description here

+0

+1 Grazie. Questa è una bella soluzione semplice. Non sapevo nemmeno che fosse possibile includere caratteri unicode come questo. Se fosse possibile dividere il credito per le risposte accettate, lo farei. Grazie! –

+1

Tuttavia, come avvertimento, alcune piattaforme/dispositivi non rendono correttamente tutti i caratteri Unicode, quindi è una buona cosa avere anche le soluzioni di agstudy e baptiste su cui ricorrere quando succede. Vedi [questo post del blog] (http://bmb-common.blogspot.de/2011/05/unicode-symbols-in-r.html) per alcuni suggerimenti aggiuntivi. – plannapus

+0

Ah, grazie per l'avviso. Probabilmente mi avrai salvato qualche ulteriore mal di testa futuro quando non riesco a ricreare la tua soluzione. Grazie ancora, e grazie per il link. –

4

se si utilizza la grafica della griglia, quindi il following grob può essere utile allo spazio le linee in base alla loro altezza,

library(devtools) 
source_gist(2732693) 
grid.expr(as.expression(Lines)) 

(utilizzando linee di agstudy)