web-dev-qa-db-fra.com

R + ggplot2 => ajouter des étiquettes sur le diagramme circulaire à facettes

Je veux ajouter des étiquettes de données sur l'omble à tarte à facettes.
Peut-être que quelqu'un peut m'aider.

Mes données:

year <- c(1,2,1,2,1,2)
prod <- c(1,1,2,2,3,3)
quantity <- c(33,50,33,25,34,25)

df <- data.frame(year, prod, quantity)
rm(year, prod, quantity)

Code:

library(ggplot2)

# center's calculated by hand
centr2 <- c(16, 25, 49, 62.5, 81, 87.5)

ggplot(data=df, aes(x=factor(1), y=quantity, fill=factor(prod))) +
    geom_bar(stat="identity") +
    geom_text(aes(x= factor(1), y=centr2, label = df$quantity), size=10) +
    facet_grid(facets = .~year, labeller = label_value) +
    coord_polar(theta = "y")

Et mon résultat est:

pie char

Si je supprime coord_polar (theta = "y"), j'aurai le tracé suivant:

bar plot

Et maintenant, il est clair pour moi pourquoi mes étiquettes de données ne correspondent pas.
Mais je ne sais pas comment y remédier.

J'ai lu:
1. Placer des étiquettes sur le graphique à secteurs
2. Ajouter du texte à ggplot avec des densités à facettes
3. Graphique à secteurs obtenant son texte les uns sur les autres

Mais je n'ai pas trouvé la réponse.

23
AndriusZ

J'aborderais cela en définissant une autre variable (que j'appelle pos) dans df qui calcule la position des étiquettes de texte. Je le fais avec dplyr mais vous pouvez bien sûr aussi utiliser d'autres méthodes.

library(dplyr)
library(ggplot2)

df <- df %>% group_by(year) %>% mutate(pos = cumsum(quantity)- quantity/2)

ggplot(data=df, aes(x=factor(1), y=quantity, fill=factor(prod))) +
  geom_bar(stat="identity") +
  geom_text(aes(x= factor(1), y=pos, label = quantity), size=10) +  # note y = pos
  facet_grid(facets = .~year, labeller = label_value) +
  coord_polar(theta = "y")

pie

23
docendo discimus