2015-12-12 16 views
9

Ho colpito un ostacolo nella scrittura di una funzione ggplot. Sto cercando di modificare le etichette sfaccettatura in una trama ggplot facet_wrap .... ma la sua prova più complicato di quanto ho pensato che sarebbe stato ....ggplot rinominazione etichette facet in facet_wrap

I dati che sto usando qui si può accedere

str(ggdata) 
'data.frame': 72 obs. of 8 variables: 
$ Season : Factor w/ 3 levels "Autumn","Spring",..: 2 2 2 2 2 2 2 2 2 2 ... 
$ Site : Factor w/ 27 levels "Afon Cadnant",..: 13 13 13 13 13 13 13 13 13 13 ... 
$ Isotope: Factor w/ 4 levels "14CAA","14CGlu",..: 1 1 1 1 1 1 2 2 2 2 ... 
$ Time : int 0 2 5 24 48 72 0 2 5 24 ... 
$ n  : int 3 3 3 3 3 3 3 3 3 3 ... 
$ mean : num 100 88.4 80.7 40.5 27.6 ... 
$ sd  : num 0 1.74 2.85 2.58 2.55 ... 
$ se  : num 0 1 1.65 1.49 1.47 ... 

ho scritto la seguente funzione per creare la ggplot che utilizza i livelli di fattore isotopi di etichettare le sfaccettature:

plot_func <- function(T) {site_plots <- ggplot(data = T) + geom_point(aes(Time, mean, colour = Season, shape = Season)) + 
    geom_line(aes(Time, mean, colour = Season, linetype = Season)) + 
    geom_errorbar(aes(Time, mean, ymax = (mean + se), ymin = (mean - se)), width = 2) + 
    labs(title = T$Site[1], y = "Percentage of isotope remaining in solution", x = "Time (h)") + 
    scale_x_continuous(breaks=c(0, 24, 48, 72)) + 
    scale_y_continuous(limits=c(0,115), breaks = c(0,25,50,75,100)) + 
    theme(axis.title.y = element_text(vjust = 5)) + 
    theme(axis.title.x = element_text(vjust = -5)) + theme(plot.title = element_text(vjust = -10)) + 
    theme_bw() + facet_wrap(~Isotope, ncol =2) 
    print(site_plots) 
    ggsave(plot = site_plots, filename = paste(T$Site[1], ".pdf"), 
    path = "C:/Users/afs61d/Dropbox/Academic/R/Practice datasets/Helens_data/Site_Isotope_Season_plots/", 
    width = 9, height = 7, dpi = 300)} 

conseguente questo bel grafico:

enter image description here

che è bello, ma voglio cambiare le etichette sfaccettatura ora ... aver fatto qualche rovistando google ho pensato che potrei essere in grado di utilizzare la funzione labeller come argomento da passare a facet_wrap. Dopo un'ora frustrante ho scoperto che funziona solo con facet_grid !!! ??? Quindi, un metodo alternativo è stato quello di cambiare i nomi dei livelli del fattore tanto mi dalle etichette sfaccettatura che voglio ::

gdata$Isotope <- revalue(x = ggdata$Isotope, 
c("14CAA" = " 14C Amino Acids", "14CGlu" = "14C Glucose", 
    "14cGlu6P" = "14C Glucose-6-phosphate", "33P" = "33P Phosphate")) 

questo funziona, ma il problema che ho adesso è che voglio i numeri nelle etichette a essere super-sceneggiato. Qualcuno può suggerire il modo migliore per raggiungere questo obiettivo? Grazie

+0

penso "etichettatrice" è disponibile per facet_wrap nella versione di sviluppo di ggplot: http://docs.ggplot2.org/dev/facet_wrap.html –

+0

@BenBolker Grazie ... che sarebbe molto utile - come posso installarlo? –

+0

@ eipi10 Non penso che 'labeller' possa essere passato a' facet_wrap' ... che è il nodo del problema –

risposta

3

riescono a risolvere il problema! Ha avuto problemi durante l'installazione della versione di sviluppo di ggplot ma dopo l'installazione di curl e devtools e la reinstallazione di scales ha funzionato. Ho provato @ eipi10 risposta, ma non sono riuscito a convincere quello per funzionare così ho cambiato i nomi delle etichette fattore in un modo diverso:

ggdata$Isotope <- factor(ggdata$Isotope, labels = c("NULL^14*C~Amino~Acids", 
"NULL^14*C~Glucose", "NULL^14*C~Glucose-6-phosphate", "NULL^33*P~Phosphate")) 

Poi ho regolato la funzione ggplot di passare labeller = label_parsed alla funzione facet_wrap:

plot_func <- function(T) {site_plots <- ggplot(data = T) + geom_point(aes(Time, mean, colour = Season, shape = Season)) + 
    geom_line(aes(Time, mean, colour = Season, linetype = Season)) + 
    geom_errorbar(aes(Time, mean, ymax = (mean + se), ymin = (mean - se)), width = 2) + 
    labs(title = T$Site[1], y = "Percentage of isotope remaining in solution", x = "Time (h)") + 
    scale_x_continuous(breaks=c(0, 24, 48, 72)) + 
    scale_y_continuous(limits=c(0,115), breaks = c(0,25,50,75,100)) + 
    theme(axis.title.y = element_text(vjust = 5)) + 
    theme(axis.title.x = element_text(vjust = -5)) + theme(plot.title = element_text(vjust = -10)) + 
    theme_bw() + facet_wrap(~Isotope, ncol =2, labeller = label_parsed) 
    print(site_plots) 
    ggsave(plot = site_plots, filename = paste(T$Site[1], ".pdf"), 
    path = "C:/Users/afs61d/Dropbox/Academic/R/Practice datasets/Helens_data/Site_Isotope_Season_plots/", 
    width = 9, height = 7, dpi = 300)} 

Il passaggio di ggdata a plot_func mi fornisce i seguenti grafici con le etichette di sfaccettatura corretti.

enter image description here

6

Impostare le etichette delle faccette sulle espressioni appropriate, quindi utilizzare la funzione label_parsedlabeller per assicurarsi che siano visualizzate correttamente. Ecco un esempio, utilizzando la cornice di dati iris built-in:

data(iris) 
iris$Species = as.character(iris$Species) 
iris$Species[iris$Species == "virginica"] = "NULL^14*C~Amino~Acids" 

ggplot(iris, aes(Sepal.Width, Sepal.Length)) + 
    geom_point() + 
    facet_wrap(~ Species, labeller=label_parsed) 

è necessario aggiungere il NULL prima di ^14*C o avrai un errore a causa di avere ^ come il carattere iniziale. * e ~ contrassegnano i limiti di ciascuna parte dell'espressione, a seconda che non si desideri o non si desideri uno spazio tra ciascuna parte.

Al momento della stesura di questo documento (12 dicembre 2015), è necessario utilizzare la versione di sviluppo di ggplot2 affinché funzioni con facet_wrap. Tuttavia, questa funzione sarà presumibilmente presto incorporata in una versione normale del pacchetto.

enter image description here

+1

trucco accurato con "NULL" per abilitare l'apice iniziale. Ma la domanda dell'OP riguardava 'facet_wrap', non' facet_grid'. – Matt74

+0

@ eipi10 grazie, ma questo non funziona con 'facet_wrap' ... utile per vedere' label_parsed' in azione anche se –

+2

Ho aggiornato per usare 'facet_wrap', che funziona anche. Sto usando la versione di sviluppo di ggplot ('ggplot2_1.0.1.9003'). Forse non funziona nell'ultima versione di CRAN? – eipi10

Problemi correlati