2015-10-04 36 views
5

Qual è il modo migliore per salvare uno stile ggplot in un oggetto in R? So che ggplot ha dei temi personalizzati, ma ci sono molti progetti visivi che non rientrano nella funzione del tema.Memorizza gli stili di ggplot personalizzati nell'oggetto

Ecco alcuni dati di esempio (fuso) e un grafico che ho lavorato su

library(ggplot2) 

mdf <- structure(list(group = structure(c(2L, 3L, 1L, 2L, 3L, 1L), .Label = c("democrat", 
"founder", "libertarian"), class = "factor"), variable = structure(c(1L, 
1L, 1L, 2L, 2L, 2L), .Label = c("similar", "compete"), class = "factor"), 
    value = c(0.7, 0.2, 0.4, 0.3, 0.8, 0.6)), row.names = c(NA, 
-6L), .Names = c("group", "variable", "value"), class = "data.frame") 

ggplot(mdf, aes (x=group, y=value, fill = variable)) + 
    geom_bar(stat="identity", position="dodge", alpha = 0.8) + 
    geom_bar(stat="identity", position="dodge", color = "#A9A9A9", alpha = 0.8) + 
    scale_fill_manual(values=c("#05f2ae", "#17b0c4")) + 
    geom_text(aes(x=group, y=value, ymax=value, label=value), 
      position=position_dodge(1), vjust=-1, size=12) + 
    coord_cartesian(ylim = c(0, 1)) 
    theme(plot.margin = unit(c(1,1,2,2), "cm"), 
     axis.text.x = element_text(vjust=0.5, size=20), 
     plot.title=element_text(size=20, vjust=2), 
     panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
     axis.title.x = element_blank(), axis.title.y = element_blank(), 
     panel.background = element_rect(fill = "#D9D9D9")) 

sto producendo un sacco di grafici con lo stesso design e desidera memorizzare il progetto in un unico oggetto, come "plot_style", in modo che i grafici vengano automaticamente aggiornati con lo stile, anche se decido di cambiarlo in un secondo momento.

Se provo a memorizzare tutto sotto ggplot (...) in un oggetto "x", viene visualizzato un errore, Error: No layers in plot. Qual è il modo migliore per memorizzare tutti gli elementi di un ggplot (meno le variabili/dati) in un singolo oggetto?

Grazie.

+0

Vedere "? +. Gg'. Ad esempio, è possibile assegnare la trama di base a un oggetto e quindi aggiornare la trama con un'altra cornice dati utilizzando '% +%'. – Henrik

risposta

4

È possibile creare un elenco di personalizzazioni e applicarlo a ciascun grafico. Ad esempio:

customPlot = list(
    theme(plot.margin = unit(c(1,1,2,2), "cm"), 
     axis.text.x = element_text(vjust=0.5, size=20), 
     plot.title=element_text(size=20, vjust=2), 
     panel.grid.major = element_blank(), panel.grid.minor = element_blank(), 
     axis.title.x = element_blank(), axis.title.y = element_blank(), 
     panel.background = element_rect(fill = "#D9D9D9")), 
    coord_cartesian(ylim = c(0, 1)), 
    scale_fill_manual(values=c("#05f2ae", "#17b0c4")) 
) 

ggplot(mdf, aes (x=group, y=value, fill = variable)) + 
    geom_bar(stat="identity", position="dodge", alpha = 0.8) + 
    geom_bar(stat="identity", position="dodge", color = "#A9A9A9", alpha = 0.8) + 
    geom_text(aes(x=group, y=value, ymax=value, label=value), 
      position=position_dodge(1), vjust=-1, size=12) + 
    customPlot 
+0

fantastico. Solo così capisco, perché R accetta una lista con valori indefiniti, ma non archiviata come oggetto? cioè, se non avessi applicato "list()" a customPlot, ma invece lo avessi assegnato solo tramite <-, avrei ricevuto un errore. – tom

+0

Ho solo una conoscenza rudimentale di ciò che 'ggplot' sta facendo" sotto il cofano ", ma penso che sia perché gli oggetti' ggplot' sono già memorizzati come liste, e in alcuni casi sono le espressioni non valutate che sono memorizzate nella lista. – eipi10

+0

A proposito, puoi anche includere le chiamate 'geom_bar' e' geom_text' in 'customPlot', quindi tutto il necessario per completare ogni trama è' ggplot (mdf, aes (x = gruppo, y = valore, riempimento = variabile)) + customPlot'. – eipi10

Problemi correlati