2013-01-03 7 views
7

Mi piacerebbe avere il titolo per la trama in due righe, ma questo non funziona, perché? e come posso farlo funzionare?Titolo principale in due righe

CVal<-1 
SumEpsVal<-2 
plot(1:10, main=bquote(paste("C=", .(CVal), " \n ", sum(xi), "=", .(SumEpsVal)))) 

Questo qui funziona:

plot(1:10, main=paste("C=1", "\n", "SumXi=2")) 

Credo bquote fa qualcosa che non va ... Ho provato a cambiare ambiente nel bqoute (il cui argomento) ma io don (cercare bquote?) so quale ambiente prendere.

BTW:

plot(1:10, main=bquote(paste("C=", .(CVal), "bla \n ", sum(xi), "=", .(SumEpsVal)))) 

fa qualcosa di pazzo con il "bla".

risposta

10

Il problema principale è che plotmath non supporta le nuove righe all'interno delle espressioni da produrre.

Control characters (e.g. \n) are not interpreted in character strings in plotmath, 
    unlike normal plotting. 

È davvero necessario creare e stampare ogni riga separatamente.

Ad esempio:

Lines <- list(bquote(paste("C=", .(CVal))), 
       bquote(paste(sum(xi), "=", .(SumEpsVal)))) 

Ora uscita ogni riga, il testo nella lista viene convertito in espressioni do.call

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

enter image description here

4

Un modo per raggiungere questo obiettivo è quello di utilizzare mtext per aggiungere una riga aggiuntiva sotto il titolo principale come segue:

plot(1:10, main=bquote(paste("C=", .(CVal)))) 
mtext(bquote(paste(sum(xi), "=", .(SumEpsVal))),side=3,line=0) 

Ci può essere una soluzione più bella, ma forse questo è sufficiente per le vostre esigenze.

11

Personalmente avrei usato mtext come già suggerito . Ma se si vuole veramente che sia un one-liner, si può "barare" bquote utilizzando atop:

plot(1:10, main= 
    bquote(atop(paste("C=",.(CVal)), paste(sum(xi),"=",.(SumEpsVal))))) 

Si allinea anche entrambe le linee ordinatamente al centro.

Problemi correlati