Come posso modificare le cifre dell'asse Y in percentuali in un grafico a barre?


107

Come possiamo cambiare l'asse y in percentuale come la figura? Posso cambiare l'intervallo dell'asse y ma non posso farlo in percentuale. inserisci qui la descrizione dell'immagine

Risposte:


236

Uso:

+ scale_y_continuous(labels = scales::percent)

Oppure, per specificare i parametri di formattazione per la percentuale:

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

(il comando labels = percentè obsoleto dalla versione 2.2.1 di ggplot2)


3
Mi è piaciuto che tu non debba digitare library(scales)per questo.
Akshay Gaur

E il motivo scales::percent(accuracy = 1)non funziona è perché le *_format()versioni creano una funzione invece di ... qualunque cosa percent()crei da sola, è corretto?
MokeEire

62

In linea di principio, puoi passare qualsiasi funzione di riformattazione al labelsparametro:

+ 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 

Esempio riproducibile:

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 per nessuna dipendenza esterna. So che poiché Hadley è l'autore sia di ggplot2 che di scale, non dovrebbe avere molta importanza, ma questa soluzione è comunque apprezzata.
Mark White

44

ggplot2e i scalespacchetti possono farlo:

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)

Sembra che l' stat()opzione sia stata rimossa, causando il messaggio di errore. Prova questo:

library(scales)

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

myplot

2

Presa in prestito da @Deena sopra, la modifica della funzione per le etichette è più versatile di quanto si possa pensare. Ad esempio, avevo un ggplot in cui il denominatore delle variabili conteggiate era 140. Ho usato il suo esempio così:

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

Questo mi ha permesso di ottenere le mie percentuali sul denominatore 140, e quindi di rompere la scala con incrementi del 25% anziché i numeri strani su cui era predefinito. La chiave qui è che le interruzioni di scala sono ancora impostate dal conteggio originale, non dalle tue percentuali. Pertanto le interruzioni devono essere comprese tra zero e il valore del denominatore, con il terzo argomento in "interruzioni" che è il denominatore diviso per il numero di interruzioni di etichetta desiderate (ad es. 140 * 0,25 = 35).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.