2014-04-19 13 views
8

TL; DR: Come posso salvare il testo e le dimensioni dell'asse di tracciamento e così via un oggetto per rendere il mio codice più corto?La formattazione del tema ggplot può essere salvata come oggetto?

Supponiamo, ad esempio, di stampare dati diversi con geomi potenzialmente diversi ma utilizzare lo stesso testo di ridimensionamento e titoli degli assi.

Sarebbe simile a questa nel codice formato da

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")) 

#... 

Come posso salvare o

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")) 

come proprio oggetto da aggiungere alla ggplot quando mi piace. Ggplot è abbastanza flessibile da soddisfare il mio bisogno qui?

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

Questa domanda viola la filosofia di denominazione dell'oggetto su cui è stato creato ggplot?

+0

Beh ... l'hai testato e ha funzionato? –

+0

Sì. e non ha funzionato. Ha funzionato per te? – cylondude

+1

elementi del tema che è possibile memorizzare come tema; etichette, geomi, scale ecc., d'altra parte, dovrebbero essere memorizzati come un 'elenco()'. – baptiste

risposta

14

si può fare un oggetto tema senza problemi, ad esempio:

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

E 'ancora più facile, se questo è il vostro tema standard di digitare

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

Nel primo caso si scrive:

ggplot(...)+mytheme 

mentre in quest'ultimo, poiché il tema personalizzato è ora il tema standard, è necessario solo t Tipo o:

ggplot(...) 
+0

Quindi tutti gli elementi della trama devono essere racchiusi in theme()? – cylondude

+0

Ah, beh, non puoi alimentare tutti gli oggetti ggplot in un tema. Per questo, vorrei creare una funzione che prende un oggetto ggplot e all'interno della funzione aggiungere ritocchi all'argomento. –

+0

Grazie che risponde alla mia domanda – cylondude

7

Stack Overflow utente Baptiste ha commentato la mia domanda con le informazioni della pepita che l'etichettatura voglio salvare può essere salvato come un elenco. Egli menziona che le geom e le scale possono essere inserite in una lista, ma ho solo testato le etichette. Come ho provato, i temi non funzionavano se li scrivevo in una lista e dovevano essere salvati separatamente.

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 
Problemi correlati