web-dev-qa-db-fra.com

Plusieurs lignes de texte par étiquette de légende dans ggplot2

J'essaie de gérer de très longues étiquettes pour une légende dans un graphique à barres (voir l'image incluse et le code que j'ai utilisé pour la produire. Je dois les décomposer en plusieurs (lignes de) lignes (2 ou 3), autres sage, l'image sera trop large. Une aide serait très utile. En fait, je soupçonne également que mon code n'est pas aussi concis qu'il devrait l'être, mais au moins il fonctionne (mais n'hésitez pas à changer)

enter image description here

glimpse(df)

Observations: 301
Variables: 3
$ V12n     <int> 1, 4, 4, 1, 3, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1...
$ V12      <fctr> De verwijzer neemt contact op om na te gaa...
$ METING.f <fctr> Meting 0, Meting 0, Meting 0, Meting 0, Me...

p = ggplot(df, aes(x = V12n, fill = V12)) + 
 geom_bar(aes(y = (..count..)/tapply(..count..,..PANEL..,sum)
 [..PANEL..])) + 
 scale_y_continuous(labels = scales::percent) + 
 geom_text(aes(y = ((..count..)/sum(..count..)), 
               label = scales::percent((..count..)/tapply(..count..,..PANEL..,sum)[..PANEL..])), 
               stat = "count", vjust = -0.25) +
 facet_grid(.~ METING.f) +
 labs(title = " ",
   x = "Vraag 12",
   y = "Percentage")  +
 theme(axis.text.x = element_blank(),
       axis.ticks.x=element_blank()) +
 scale_fill_manual(values = c("greenyellow", "green4", "darkorange1", "red"), 
                name = "Zijn er afspraken gemaakt over het overdragen van de verantwoordelijkheid naar de volgende zorgverlener?\n") 

 p
12
Benjamin Telkamp

Vous pouvez utiliser str_wrap pour un encapsulage automatique des longues chaînes ou vous pouvez effectuer des sauts de code en ajoutant \n (le caractère de saut de ligne) à une chaîne. Pour ajouter de l'espace entre les touches de légende, vous pouvez utiliser le legend.key.height élément de thème. Voici un exemple avec le cadre de données iris intégré:

library(stringr)
library(tidyverse)

# Create long labels to be wrapped
iris$Species = paste(iris$Species, 
                     "random text to make the labels much much longer than the original labels")

ggplot(iris, aes(Sepal.Length, Sepal.Width, colour=str_wrap(Species,20))) +
  geom_point() +
  labs(colour="Long title shortened\nwith wrapping") +
  theme(legend.key.height=unit(2, "cm"))

enter image description here

22
eipi10