2013-01-03 12 views
7

Chciałbym mieć tytuł do fabuły w dwóch wierszach, ale to nie działa, dlaczego? i jak mogę to sprawić?Główny tytuł fabuły w dwóch wierszach

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

To tu działa:

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

Chyba bquote robi coś złego ... Próbowałem zmienić środowisko bqoute (where-argument) ale ja don (patrzeć bquote?) nie wiem, jakie środowisko wybrać.

BTW:

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

robi coś szalonego z "bla".

Odpowiedz

10

Głównym problemem jest to, że działka nie obsługuje nowych linii w wyrażeniach do wyprowadzania.

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

Naprawdę musisz utworzyć i wypisać każdą linię osobno.

Na przykład:

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

Teraz wyjście każdej linii tekstu na liście jest konwertowany do wyrażenia do.call

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

enter image description here

4

Jednym ze sposobów osiągnięcia tego celu jest wykorzystanie mtext aby dodać dodatkowy wiersz pod głównym tytułem w następujący sposób:

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

Nie może być ładniejsze rozwiązanie, ale być może to wystarczy do swoich potrzeb.

11

Osobiście używam mtext jak już sugerowano . Ale jeśli naprawdę chcesz go mieć jedno-liner, można „oszukać” bquote za pomocą atop:

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

nawet wyrównuje obie linie starannie do centrum.

Powiązane problemy