¿Cómo puedo cambiar las cifras del eje Y en porcentajes en un diagrama de barras?

107

¿Cómo podemos cambiar el eje y al porcentaje como en la figura? Puedo cambiar el rango del eje y, pero no puedo llegar al porcentaje. ingrese la descripción de la imagen aquí

Mus
fuente

Respuestas:

236

Utilizar:

+ scale_y_continuous(labels = scales::percent)

O, para especificar parámetros de formato para el porcentaje:

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

(el comando labels = percentestá obsoleto desde la versión 2.2.1 de ggplot2)

luchonacho
fuente
3
Me gustó que no tengas que escribir library(scales)para esto.
Akshay Gaur
Y la razón por la scales::percent(accuracy = 1)que no funciona es porque las *_format()versiones crean una función en lugar de ... lo que percent()crea solo, ¿es correcto?
MokeEire
62

En principio, puede pasar cualquier función de reformateo al labelsparámetro:

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

O

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

Ejemplo reproducible:

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
fuente
8
+1 para no dependencia externa. Sé que dado que Hadley es el autor tanto de ggplot2 como de escalas, realmente no debería importar, pero esta solución aún se agradece.
Mark White
44

ggplot2y los scalespaquetes pueden hacer eso:

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)

Parece que la stat()opción se ha eliminado, lo que provoca el mensaje de error. Prueba esto:

library(scales)

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

myplot
Penguin_Knight
fuente
2

Tomado de @Deena arriba, esa modificación de funciones para etiquetas es más versátil de lo que podría haber pensado. Por ejemplo, tenía un ggplot donde el denominador de las variables contadas era 140. Usé su ejemplo así:

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

Esto me permitió obtener mis porcentajes en el denominador 140 y luego romper la escala en incrementos del 25% en lugar de los números extraños que tenía por defecto. La clave aquí es que los saltos de escala todavía están establecidos por el recuento original, no por sus porcentajes. Por lo tanto, las rupturas deben ser desde cero hasta el valor del denominador, siendo el tercer argumento en "rupturas" el denominador dividido por todas las rupturas de etiqueta que desee (por ejemplo, 140 * 0.25 = 35).

DanM
fuente