2014-05-07 15 views
5

Jestem nowy dla R i próbuję wymyślić, jak napisać coś w stylu "Hej chłopaki, to jest moja fabuła dla (\ n) 8 < = (mniej niż lub równe) x < = 10 "w moim tytule-działce.Jak używać więcej niż jednego wyrażenia z rzędu

Próbowałem coś takiego:

plot(1:10, main="Hey, guys, this is my plot for \n") 
mtext(c(expression(8 <= x),expression(x <= 10), side=3) 

nie daje dokładnie to, co chcę, ale „8 (mniejsze lub równe) xx (mniejsze lub równe) 10”, a te dwa wyrażenia są drukowane w linii pod głównym tytułem, (co jest całkiem fajne), ale w tym samym miejscu, co jest dość dużo bezużyteczny :)

próbowałem również:

plot(1:10, main=bquote(paste(8 <= x, x <= 10, sep=","))) 

Jakie robi to, co chcę (z wyjątkiem Seper ator wydaje się być całkowicie ignorowany), ale nie mogę dodać kolejnego tekstu. Wyjście: "8 (mniejszy lub równy) xx (mniejszy lub równy) 10".

I kiedy próbuje

plot(1:10, main=paste("x",bquote(paste(x <= 8,z <= 10,sep=" ")),sep=" ")) 

wyjście podrażniona mi całkowicie: tytuł: "xpaste (\ n) xx < = 8 (\ n) XZ < = 10 (\ n) x" ((\ n) jest linią podziału, pozostałe znaki są dokładnie tym, co jest drukowane)

Czy istnieje możliwość wydrukowania wyrażeń z więcej niż jednym operatorem?

Odpowiedz

3

Wyrażenia są nieco głupkowaty, ale tutaj jest to, jak można to zrobić

plot(1:10, main="Hey, guys, this is my plot for \n") 
mtext(expression(paste(8 <= x,", ",x <= 10)), side=3) 

Aby otrzymać wektor ekspresji, po prostu użyć expression(exp1,exp2,exp3). Nie musisz martwić się o c() lub list(). A następnie, aby wymieszać wyrażenia z tekstem, często przydaje się funkcja paste(). Bez paste, aby połączyć je jako jedno wyrażenie, będą one drukować jeden na drugim w tym samym miejscu.

+0

Jako uzupełnienie odpowiedzi MrFlicka, jeśli potrzebna była tylko jedna litera x, tak właśnie zadałem pytanie: 'fabuła (1:10, main =" Hej, chłopaki, to jest moja fabuła dla \ n ") mtext (wyrażenie (wklej (8 <= x, "" <= 10)), bok = 3) ' – Csislander

4
heyTitle <- bquote(atop(
    "Hey, guys, this is my plot for", 
    {8 <=x}*phantom()<=10 
    )) 

plot(1:10, main=heyTitle) 

Dzięki this answer dla atop() sztuczka.

EDIT: Oto rysunek

EDIT 2: pożyczanie od another answer by G. Grothendieck używać uchwytów do mocowania odstępy.

enter image description here

+0

+1 dla' atop'. –

+0

+1 za wprowadzenie mnie na szczyt –

+0

Dziękuję wam obu. Teraz muszę tylko zdecydować, które rozwiązanie wykorzystam. – Nzuri

4

Spróbuj tego:

plot(1:10, main = ~ bold(atop("Hey, guys, this is my plot for", {"8" <= x} <= "10"))) 

Na urządzeniu windows() wygląda to tak: screenshot

REVISED odstępy i wykonane 2 linia nieco większy, aby dopasować pierwszą linię. Dodano pomysł rbatt'a o atop. Dalsze uproszczenie.

+0

Dobre wykorzystanie {} do radzenia sobie z odstępami. Zamierzam użyć twojej techniki, aby zaktualizować moją odpowiedź - mam nadzieję, że nie masz nic przeciwko (poprzednio użyłem '8 <= ~ x ~ phantom() <= 10', teraz użyj' phantom '{8 <= x} *() <= 10' – rbatt

+1

OK. Zamienię cię na {} na 'atop'. –

Powiązane problemy