Solución:
Aquí hay una solución que evita editar sus datos:
Digamos que su trama está facetada por group
parte de su marco de datos, que tiene niveles control, test1, test2
, luego crea una lista nombrada por esos valores:
hospital_names <- list(
'Hospital#1'="Some Hospital",
'Hospital#2'="Another Hospital",
'Hospital#3'="Hospital Number 3",
'Hospital#4'="The Other Hospital"
)
Luego cree una función ‘etiquetadora’ y empújela en su llamada 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)
...
Esto usa los niveles del marco de datos para indexar la lista hospital_names, devolviendo los valores de la lista (los nombres correctos).
Tenga en cuenta que esto solo funciona si solo tiene una variable de facetas. Si tiene dos facetas, la función de etiquetadora debe devolver un vector de nombre diferente para cada faceta. Puedes hacer esto con algo como:
plot_labeller <- function(variable,value){
if (variable=='facet1') {
return(facet1_names[value])
} else {
return(facet2_names[value])
}
}
Dónde facet1_names
y facet2_names
son listas predefinidas de nombres indexados por los nombres del índice de facetas (‘Hostpital # 1’, etc.).
Editar: El método anterior falla si pasa una combinación de variable / valor que la etiquetadora no conoce. Puede agregar un sistema a prueba de fallas para variables desconocidas como esta:
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))
}
}
Respuesta adaptada de cómo cambiar las etiquetas de texto de tira en ggplot con faceta y margen = TRUE
editar: ADVERTENCIA: si está utilizando este método para realizar una faceta personaje columna, es posible que obtenga etiquetas incorrectas. Consulte este informe de errores. corregido en versiones recientes de ggplot2.
Aquí hay otra solución que está en el espíritu de la dada por @ naught101, pero más simple y tampoco arroja una advertencia sobre la última versión de ggplot2.
Básicamente, primero crea un vector de carácter con nombre
hospital_names <- c(
`Hospital#1` = "Some Hospital",
`Hospital#2` = "Another Hospital",
`Hospital#3` = "Hospital Number 3",
`Hospital#4` = "The Other Hospital"
)
Y luego lo usa como etiquetador, simplemente modificando la última línea del código dado por @ naught101 a
... + facet_grid(hospital ~ ., labeller = as_labeller(hospital_names))
Espero que esto ayude.
Cambie los nombres de los niveles de factores subyacentes con algo como:
# Using the Iris data
> i <- iris
> levels(i$Species)
[1] "setosa" "versicolor" "virginica"
> levels(i$Species) <- c("S", "Ve", "Vi")
> ggplot(i, aes(Petal.Length)) + stat_bin() + facet_grid(Species ~ .)