2013-12-12 3 views
12

Desidero aggiungere alcuni pedici e apici alle etichette del mio grafico. Ho provato expression, ma non funziona come vorrei con le nuove linee (\n). Ho provato a risolverlo usando paste, ma non funziona. Qui di seguito sono alcuni dei miei tentativi:Espressione e nuova riga nelle etichette del grafico

par(mfcol=c(1,3)) 
plot(1,1,main=expression("first line \n second line x"^2)) 
plot(1,1,main=expression(paste("first line \n second line", "x"^2))) 
plot(1,1,main=paste("first line \n second line", expression("x"^2))) 

Produce:

enter image description here

In prime due foto la seconda linea non è ben centrato, nel terzo l'apice fallisce. Come ottenere sia la linea centrale che i pedici/apici?

+1

Inoltre: http://stackoverflow.com/questions/15297814/ include-text-control-characters-in-plotmath-expressions? lq = 1 e http://stackoverflow.com/questions/13198170/combining-expression-with-n sullo stesso argomento. – plannapus

+1

Voto positivo: L'immagine ti mostra immediatamente, hai trovato la domanda giusta :) – BurninLeo

risposta

18

È possibile introdurre un'interruzione di linea all'interno di un'espressione: (. Sto usando bquote piuttosto che expression qui - sia il lavoro, in questo caso)

bquote(atop("first line", 
      "second line" ~ x^2)) 

Esegui demo(plotmath) per ulteriori informazioni e cercare alla documentazione per atop.

boxplot a quanto pare ha qualche problema interpretare le espressioni nel suo titolo. Una soluzione semplice è quella di tracciare il titolo a parte:

boxplot(data, main = '') 
title(bquote(atop("first line", "second line" ~ x^2))) 
+1

Questo è strano: questa soluzione funziona bene con 'trama', ma non funziona con' boxplot'. Ho ricevuto un messaggio che non c'era alcuna funzione chiamata "atop". –

+0

@ MartaCz-C Curioso, hai ragione. Tuttavia, la soluzione è piuttosto semplice: vedere la risposta aggiornata. –

7

Una soluzione rapida è quella di aggiungere alcuni spazi prima della parola "prima".

Dal plotmath non supporta a capo, è possibile utilizzare mtext per creare le linee uno per uno come questo:

plot(1,1) 
exp <- 2 
Lines <- list(bquote("first line"),bquote("second line x"^2)) 
mtext(do.call(expression, Lines),side=3,line=1:0) 

enter image description here

+2

Penso di aver visto questo [da qualche parte] (http://stackoverflow.com/a/15300449/1478381) prima ...! (è ancora un'ottima risposta) –

+0

@ SimonO101 grazie e buona cattura :) – agstudy