Comment puis-je modifier manuellement les étiquettes des clés dans une légende dans ggplot2

je prépare un scénario pour publication. J'ai créé un graphique en boîtes empilées pour montrer la fréquence des patients dans chaque groupe qui étaient une accumulation compliquée de séronégatifs versus pas. La légende utilise les étiquettes de la base de données qui sont appropriées pour nous qui travaillons sur le projet, mais pas pour la publication. Je veux changer les noms pour quelque chose plus rapidement compris par le lecteur.

Ainsi, par exemple, exécutez le script suivant

grp <- gl(n=4,k=20,labels=c("group a","group b","group c", "group d"))
value <- runif(n=80, min=10, max=150)
outcome <- cut(value,2)
data <- data.frame(grp,value,outcome)
ggplot(data, aes(grp, fill=outcome)) + geom_bar() +xlab("group") 
             +ylab("number of subjects") + labs(fill="Serologic response")

ce code crée des étiquettes clés" (10.4,80) "et" (80.150) " qui ne se prêtent pas à la publication. Au lieu de cela, je voudrais "double négatif" et "positif pour a et/ou b".

je suppose que je pourrais revenir à la base de données et me transformer pour obtenir une nouvelle variable avec le bon étiquetage. ou je pourrais juste changer mon nom de facteur ? Cependant, je préfère le faire au moment de complot.

36
demandé sur Community 2011-09-06 20:31:54

2 réponses

la méthode standard consiste à utiliser les fonctions d'échelle pour changer les étiquettes affichées pour les groupes. Vous pouvez remplacer votre appel ggplot par

ggplot(data, aes(grp, fill=outcome)) + geom_bar() +xlab("group") +
  ylab("number of subjects") + 
  scale_fill_discrete("Serologic response", 
                      breaks=c("(10.1,79.9]","(79.9,150]"), 
                      labels=c("double negative", "positive for a and/or b"))

notez que le titre de la balance a été incorporé dans l'appel scale_fill_discrete . Vous pouvez le faire avec les haches aussi, si vous aimez

ggplot(data, aes(grp, fill=outcome)) + geom_bar() +
  scale_x_discrete("group") +
  scale_y_continuous("number of subjects") + 
  scale_fill_discrete("Serologic response", 
                      breaks=c("(10.1,79.9]","(79.9,150]"), 
                      labels=c("double negative", "positive for a and/or b"))
35
répondu Brian Diggs 2011-09-06 18:39:29

j'ai trouvé une façon hybride de le faire. Il ne relabel le facteur, mais je ne dois pas le faire dans la base de données. Au lieu de cela, je le fais dans la commande ggplot.

ggplot(data, aes(grp, fill=factor(outcome,labels=c("low","high")))) + 
  geom_bar() +xlab("group") +ylab("number of subjects") +
   labs(fill="Serologic response")

y a-t-il d'autres moyens?

22
répondu Farrel 2011-09-06 17:41:45