Ma trame de données ressemble
df
Group value
1 Positive 52
2 Negative 239
3 Neutral 9
Je voudrais faire un graphique circulaire du bloc de données en utilisant ggplot.
pie <- ggplot(df, aes(x="", y=value, fill=Group)) +
geom_bar(width = 1, stat = "identity") +
coord_polar("y", start=0)
Ceci est mon camembert.
Mais quand j'essaie d'ajouter des étiquettes de pourcentage sur le graphique
pie <- ggplot(df, aes(x="", y=value, fill=Group)) +
geom_bar(width = 1, stat = "identity") +
coord_polar("y", start=0) +
geom_text(aes(y = value/2 + c(0, cumsum(value)[-length(value)]),
label = percent(value/300 )), size=5)
Voilà mon résultat.
J'ai déjà vu beaucoup de la même question que la mienne, c'est-à-dire R + ggplot2 => ajouter des étiquettes sur le graphique à facettes et les solutions n'aident pas.
Je suis d'accord avec @hrbrmstr un graphique gaufré serait mieux. Mais pour répondre à la question d'origine ... votre problème vient de l'ordre dans lequel les coins sont dessinés, qui seront par défaut alphabétiques. Lorsque vous calculez où placer les étiquettes en fonction de l'ordre dans votre bloc de données, cela ne fonctionne pas correctement.
En tant que principe général de lisibilité, effectuez tous les calculs fantaisistes des étiquettes et des positions avant le code réel dessinant le graphique.
library(dplyr)
library(ggplot2)
library(ggmap) # for theme_nothing
df <- data.frame(value = c(52, 239, 9),
Group = c("Positive", "Negative", "Neutral")) %>%
# factor levels need to be the opposite order of the cumulative sum of the values
mutate(Group = factor(Group, levels = c("Neutral", "Negative", "Positive")),
cumulative = cumsum(value),
midpoint = cumulative - value / 2,
label = paste0(Group, " ", round(value / sum(value) * 100, 1), "%"))
ggplot(df, aes(x = 1, weight = value, fill = Group)) +
geom_bar(width = 1, position = "stack") +
coord_polar(theta = "y") +
geom_text(aes(x = 1.3, y = midpoint, label = label)) +
theme_nothing()