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

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)


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, "%"))

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

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).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.