¿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í

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)


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

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.