2013-03-08 7 views
7

Generuję wykres dla wielu zestawów danych. Każdy z zestawów danych powinien otrzymać własną legendę, która może zawierać greckie litery, symbole plotowania lub sub i superskrypcję. Chciałbym wygenerować teksty legendy w pętli.Używaj znaków specjalnych/superspiterów i znaków specjalnych w tekstach legend wykresów R

Bquote działa poprawnie, jeśli istnieje tylko jeden tekst legendy. Gdy próbuję dodać additinal teksty legendy, plotmath-commads zgubić ...

x <- 0:10 
y1 = x * x 
y2 = x * 10 

plot (1,1, type="n", xlab=bquote(Omega), ylab="Y", las=1, xlim=range(x), ylim=range(y1, y2)) 
lines(x, y1, col=1, pch=1, type="b") 
lines(x, y2, col=2, pch=2, type="b") 

# generate legend texts (in a loop) 
legend_texts = c(
    bquote(Omega^2) 
    , bquote(Omega%*%10) 
) 
# Using a single bquote works fine: 
#legend_texts = bquote(Omega^2) 
#legend_texts = bquote(Omega%*%10) 

legend(
    "topleft" 
    , legend = legend_texts 
    , col = c(1:2) 
    , pch = c(1:2) 
    , lty = 1 
) 
+1

+1 za powtarzalny przykład! – A5C1D2H2I1M1N2O1R2T1

Odpowiedz

4

zmiana "legend_texts" To:

# generate legend texts (in a loop) 
legend_texts = c(
    as.expression(bquote(Omega^2)) 
    , as.expression(bquote(Omega%*%10)) 
) 

Od strony pomocy dla ?legend, w "legenda" Argument jest opisany jako:

wektor znaków lub wyrażenia. o długości ≥ 1 pojawiającej się w legendzie. Inne obiekty będą wymuszane przez as.graphicsAnnot.

wyjściowa:

enter image description here

+0

Drobna dysleksja tutaj. Strona pomocy czyta "wektor ekspresji", a nie "wektor wyrażeń". :) – A5C1D2H2I1M1N2O1R2T1

6

Spróbuj tego:

legend_texts = expression(
    Omega^2, Omega*10) 

legend(
    "topleft" 
    , legend = legend_texts 
    , col = c(1:2) 
    , pch = c(1:2) 
    , lty = 1 
    ) 

nie mogę powiedzieć, jeśli chciał Omega^10 lub Omega*10 lub Omega%*%10, ale wszystkie one akceptowalne wyrażeń plotmath.

enter image description here

+0

Lepsze niż moje używanie 'as.expression' w kółko. +1 – A5C1D2H2I1M1N2O1R2T1

+0

Używając funkcji 'expression', tworzysz wektor wyrażenia o wielu wartościach, oddzielając elementy przecinkami. –

+0

dzięki. Ponownie przeczytałem stronę pomocy i doszedłem do tego wniosku. :) – A5C1D2H2I1M1N2O1R2T1