2014-04-19 10 views
8

TL; DR: W jaki sposób zapisać tekst i rozmiary osi kreślarskiej, i tak dalej, aby mój kod był krótszy?Czy formatowanie motywu ggplot można zapisać jako obiekt?

Załóżmy na przykład, że chciałbym narysować różne dane o potencjalnie różnych geach, ale użyję tej samej wielkości i tytułów tekstu w osi.

To będzie wyglądać ten składa się w kodzie

ggplot(data = df, aes(x = x, y = y) + geom_line() + 
    ylab("my y axis") + 
    xlab("my x axis") + 
    opts(title = "my title") + 
    theme(axis.text=element_text(size=20), 
    axis.title=element_text(size=14,face="bold")) 


ggplot(data = new_df, aes(x = whatever, y = something) + geom_anythingelse() + 
    ylab("my y axis") + 
    xlab("my x axis") + 
    opts(title = "my title") + 
    theme(axis.text=element_text(size=20), 
    axis.title=element_text(size=14,face="bold")) 

#... 

Jak mogę zapisać lub

my_theme <- ylab("my y axis") + 
       xlab("my x axis") + 
       opts(title = "my title") + 
       theme(axis.text=element_text(size=20), 
       axis.title=element_text(size=14,face="bold")) 

jak własnym obiekcie, aby dodać do ggplot kiedy mi się podoba. Czy ggplot jest na tyle elastyczny, że może zaspokoić moją potrzebę?

ggplot(data = df, aes(x = x, y = y) + geom_point() + 
my_theme 

Czy to kwestia nazewnictwa naruszać przedmiot filozofii, że ggplot został zbudowany na?

+0

Cóż ... czy testowałeś to i czy zadziałało? –

+0

Tak. i to nie zadziałało. Czy to działa dla ciebie? – cylondude

+1

elementy motywu, które można zapisać jako motyw; etykiety, geomeny, skale itp., powinny być przechowywane jako 'list()'. – baptiste

Odpowiedz

14

Można dokonać obiekt tematu bez problemu np:

mytheme<-theme(panel.background=element_rect(colour="green")) 

Jest nawet łatwiej, jeśli jest to standardowy motyw wpisać

old_theme<- theme_update(panel.background=element_rect(colour="green")) 

W pierwszym przypadku piszesz:

ggplot(...)+mytheme 

w tym drugim przypadku, ponieważ niestandardowy motyw jest teraz standardowym motywem, konieczne jest tylko Type O:

ggplot(...) 
+0

Więc wszystkie elementy fabuły muszą być opakowane w motyw()? – cylondude

+0

Ah, cóż, nie możesz podać każdego obiektu ggplot do tematu. W tym celu utworzyłbym funkcję, która pobiera obiekt ggplot, a wewnątrz funkcji dodaje poprawki do argumentu. –

+0

Dzięki, że odpowiedzi na moje pytanie – cylondude

7

przepełnienie stosu użytkownika Baptiste skomentował moje pytanie z bryłki informacji, że etykietowanie chcę zapisać może być zapisany w postaci listy. Wspomina, że ​​geomy i skale można umieścić na liście, ale testowałem tylko etykiety. Kiedy to testowałem, motywy nie działały, gdy zapisałem je na liście i musiałem je zapisać osobno.

my_labels <- list(ylab("my y axis"), 
      xlab("my x axis"), 
      ggtitle("my title") 
      ) 

my_theme <- theme(axis.text=element_text(size=20), 
        axis.title=element_text(size=14,face="bold")) 

ggplot(data = df, aes(x = x, y = y) + geom_line() + my_labels + my_theme 
Powiązane problemy