Voici une solution qui évite de modifier vos données:
Supposons que votre tracé soit facetté par la group
partie de votre trame de données, qui a des niveaux control, test1, test2
, puis créez une liste nommée par ces valeurs:
hospital_names <- list(
'Hospital#1'="Some Hospital",
'Hospital#2'="Another Hospital",
'Hospital#3'="Hospital Number 3",
'Hospital#4'="The Other Hospital"
)
Créez ensuite une fonction 'étiqueteuse' et poussez-la dans votre appel 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)
...
Celui-ci utilise les niveaux de la trame de données pour indexer la liste hospital_names, renvoyant les valeurs de la liste (les noms corrects).
Veuillez noter que cela ne fonctionne que si vous n'avez qu'une seule variable de facettage. Si vous avez deux facettes, votre fonction d'étiqueteuse doit renvoyer un vecteur de nom différent pour chaque facette. Vous pouvez le faire avec quelque chose comme:
plot_labeller <- function(variable,value){
if (variable=='facet1') {
return(facet1_names[value])
} else {
return(facet2_names[value])
}
}
Où facet1_names
et facet2_names
sont des listes prédéfinies de noms indexés par les noms d'index de facette ('Hostpital # 1', etc.).
Modifier: la méthode ci-dessus échoue si vous transmettez une combinaison variable / valeur que l'étiqueteuse ne connaît pas. Vous pouvez ajouter une sécurité intégrée pour les variables inconnues comme celle-ci:
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))
}
}
Réponse adaptée de la façon de changer les étiquettes strip.text dans ggplot avec facette et marge = VRAI
edit: AVERTISSEMENT : si vous utilisez cette méthode pour créer une facette par une colonne de caractères , vous pouvez obtenir des étiquettes incorrectes. Voir ce rapport de bogue . corrigé dans les versions récentes de ggplot2.
ggplot(transform(iris, Species = c("S", "Ve", "Vi")[as.numeric(Species)]), aes(Petal.Length)) + stat_bin() + facet_grid(Species ~ .)