Como posso alterar os números do eixo Y em porcentagens em um gráfico de barras?


107

Como podemos mudar o eixo y para porcentagem como a figura? Posso alterar o intervalo do eixo y, mas não consigo chegar à porcentagem. insira a descrição da imagem aqui

Respostas:


236

Usar:

+ scale_y_continuous(labels = scales::percent)

Ou, para especificar parâmetros de formatação para a porcentagem:

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

(o comando labels = percentestá obsoleto desde a versão 2.2.1 do ggplot2)


3
Eu gostei que você não precisa digitar library(scales)para isso.
Akshay Gaur

E a razão de scales::percent(accuracy = 1)não funcionar é porque as *_format()versões criam uma função em vez de ... tudo o que percent()cria sozinho, correto?
MokeEire de

62

Em princípio, você pode passar qualquer função de reformatação para o labelsparâmetro:

+ 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 

Exemplo reproduzível:

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 nenhuma dependência externa. Eu sei que, como Hadley é o autor de ggplot2 e escalas, isso não deveria importar - mas esta solução ainda é bem-vinda.
Mark White

44

ggplot2e os scalespacotes podem fazer isso:

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 a stat()opção foi retirada, causando a mensagem de erro. Experimente isto:

library(scales)

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

myplot

2

Emprestado de @Deena acima, essa modificação de função para rótulos é mais versátil do que você pode imaginar. Por exemplo, eu tinha um ggplot em que o denominador das variáveis ​​contadas era 140. Usei o exemplo dela assim:

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

Isso me permitiu obter minhas porcentagens no denominador 140 e, em seguida, quebrar a escala em incrementos de 25%, em vez dos números estranhos que o padrão. A chave aqui é que as quebras de escala ainda são definidas pela contagem original, não por suas porcentagens. Portanto, as quebras devem ser de zero ao valor do denominador, com o terceiro argumento em "quebras" sendo o denominador dividido por quantas quebras de rótulo você deseja (por exemplo, 140 * 0,25 = 35).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.