Comment puis-je changer les chiffres de l'axe Y en pourcentages dans un barplot?

107

Comment pouvons-nous changer l'axe y en pourcentage comme sur la figure? Je peux changer la plage de l'axe y mais je ne peux pas atteindre le pourcentage. entrez la description de l'image ici

Mus
la source

Réponses:

237

Utilisation:

+ scale_y_continuous(labels = scales::percent)

Ou, pour spécifier les paramètres de mise en forme pour le pourcentage:

+ scale_y_continuous(labels = scales::percent_format(accuracy = 1))

(la commande labels = percentest obsolète depuis la version 2.2.1 de ggplot2)

Luchonacho
la source
3
J'ai aimé que vous n'ayez pas à taper library(scales)pour cela.
Akshay Gaur
Et la raison scales::percent(accuracy = 1)ne fonctionne pas parce que les *_format()versions créent une fonction au lieu de ... tout ce percent()qui crée seul, est-ce exact?
MokeEire
62

En principe, vous pouvez passer n'importe quelle fonction de reformatage au labelsparamètre:

+ scale_y_continuous(labels = function(x) paste0(x*100, "%")) # Multiply by 100 & add %  

Ou

+ scale_y_continuous(labels = function(x) paste0(x, "%")) # Add percent sign 

Exemple reproductible:

library(ggplot2)
df = data.frame(x=seq(0,1,0.1), y=seq(0,1,0.1))

ggplot(df, aes(x,y)) + 
  geom_point() +
  scale_y_continuous(labels = function(x) paste0(x*100, "%"))
Deena
la source
8
+1 pour aucune dépendance externe. Je sais que puisque Hadley est l'auteur à la fois de ggplot2 et de balances, cela ne devrait pas vraiment avoir d'importance, mais cette solution est toujours appréciée.
Mark White
44

ggplot2et les scalespackages peuvent le faire:

y <- c(12, 20)/100
x <- c(1, 2)

library(ggplot2)
library(scales)
myplot <- qplot(as.factor(x), y, geom="bar")
myplot + scale_y_continuous(labels=percent)

Il semble que l' stat()option a été supprimée, provoquant le message d'erreur. Essaye ça:

library(scales)

myplot <- ggplot(mtcars, aes(factor(cyl))) + 
          geom_bar(aes(y = (..count..)/sum(..count..))) + 
          scale_y_continuous(labels=percent)

myplot
Penguin_Knight
la source
2

Empruntée à @Deena ci-dessus, cette modification de fonction pour les étiquettes est plus polyvalente que vous n'auriez pu le penser. Par exemple, j'avais un ggplot où le dénominateur des variables comptées était 140. J'ai utilisé son exemple ainsi:

scale_y_continuous(labels = function(x) paste0(round(x/140*100,1), "%"), breaks = seq(0, 140, 35))

Cela m'a permis d'obtenir mes pourcentages sur le dénominateur 140, puis de casser l'échelle par incréments de 25% plutôt que les nombres étranges auxquels elle était par défaut. La clé ici est que les sauts d'échelle sont toujours définis par le décompte d'origine, et non par vos pourcentages. Par conséquent, les ruptures doivent être comprises entre zéro et la valeur du dénominateur, le troisième argument dans "breaks" étant le dénominateur divisé par le nombre de ruptures d'étiquette que vous souhaitez (par exemple 140 * 0,25 = 35).

DanM
la source