Ecco una soluzione che evita la modifica dei dati:
group
Supponi che la tua trama sia sfaccettata dalla parte del tuo frame di dati, che ha livelli control, test1, test2
, quindi crea un elenco chiamato da quei valori:
hospital_names <- list(
'Hospital#1'="Some Hospital",
'Hospital#2'="Another Hospital",
'Hospital#3'="Hospital Number 3",
'Hospital#4'="The Other Hospital"
)
Quindi crea una funzione "etichettatrice" e inseriscila nella tua chiamata facet_grid:
hospital_labeller <- function(variable,value){
return(hospital_names[value])
}
ggplot(survey,aes(x=age)) + stat_bin(aes(n=nrow(h3),y=..count../n), binwidth=10)
+ facet_grid(hospital ~ ., labeller=hospital_labeller)
...
Questo utilizza i livelli del frame di dati per indicizzare l'elenco hospital_names, restituendo i valori dell'elenco (i nomi corretti).
Nota che funziona solo se hai una sola variabile di sfaccettatura. Se si hanno due sfaccettature, la funzione dell'etichettatrice deve restituire un vettore diverso per ogni sfaccettatura. Puoi farlo con qualcosa del tipo:
plot_labeller <- function(variable,value){
if (variable=='facet1') {
return(facet1_names[value])
} else {
return(facet2_names[value])
}
}
Dove facet1_names
e facet2_names
sono elenchi predefiniti di nomi indicizzati dai nomi degli indici delle faccette ("Hostpital # 1", ecc.).
Modifica: il metodo sopra riportato fallisce se si passa una combinazione variabile / valore che l'etichettatrice non conosce. È possibile aggiungere un fail-safe per variabili sconosciute come questa:
plot_labeller <- function(variable,value){
if (variable=='facet1') {
return(facet1_names[value])
} else if (variable=='facet2') {
return(facet2_names[value])
} else {
return(as.character(value))
}
}
Risposta adattata da come cambiare le etichette strip.text in ggplot con facet e margin = TRUE
modifica: ATTENZIONE : se stai usando questo metodo per sfaccettare da una colonna di caratteri , potresti avere etichette errate. Vedi questo bug report . risolto nelle versioni recenti di ggplot2.
ggplot(transform(iris, Species = c("S", "Ve", "Vi")[as.numeric(Species)]), aes(Petal.Length)) + stat_bin() + facet_grid(Species ~ .)