Wie kann ich die Y-Achsen-Zahlen in einem Barplot in Prozent umwandeln?

106

Wie können wir die y-Achse wie in der Abbildung in Prozent ändern? Ich kann den Bereich der y-Achse ändern, aber ich kann es nicht in Prozent schaffen. Geben Sie hier die Bildbeschreibung ein

Mus
quelle

Antworten:

236

Verwenden:

+ scale_y_continuous(labels = scales::percent)

Oder, um Formatierungsparameter für den Prozentsatz anzugeben:

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

(Der Befehl labels = percentist seit Version 2.2.1 von ggplot2 veraltet.)

Luchonacho
quelle
3
Mir hat gefallen, dass Sie dafür nicht tippen müssen library(scales).
Akshay Gaur
Und der Grund, warum scales::percent(accuracy = 1)es nicht funktioniert, ist, dass die *_format()Versionen eine Funktion erstellen, anstatt ... was auch immer percent()alleine erstellt wird, ist das richtig?
MokeEire
60

Grundsätzlich können Sie jede Neuformatierungsfunktion an den labelsParameter übergeben:

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

Oder

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

Reproduzierbares Beispiel:

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
quelle
7
+1 für keine externe Abhängigkeit. Ich weiß, da Hadley der Autor von ggplot2 und scale ist, sollte es eigentlich keine Rolle spielen - aber diese Lösung wird immer noch geschätzt.
Mark White
44

ggplot2und scalesPakete können das:

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)

Es scheint, dass die stat()Option deaktiviert wurde und die Fehlermeldung verursacht. Versuche dies:

library(scales)

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

myplot
Penguin_Knight
quelle
2

In Anlehnung an @Deena oben ist diese Funktionsänderung für Beschriftungen vielseitiger als Sie vielleicht gedacht haben. Zum Beispiel hatte ich ein ggplot, bei dem der Nenner der gezählten Variablen 140 war. Ich habe ihr Beispiel folgendermaßen verwendet:

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

Dies ermöglichte es mir, meine Prozentsätze auf den Nenner von 140 zu bringen und dann die Skala in Schritten von 25% zu brechen, anstatt die seltsamen Zahlen, die standardmäßig verwendet wurden. Der Schlüssel hier ist, dass die Skalenumbrüche immer noch durch die ursprüngliche Anzahl und nicht durch Ihre Prozentsätze festgelegt werden. Daher müssen die Unterbrechungen von Null bis zum Nennerwert sein, wobei das dritte Argument in "Unterbrechungen" der Nenner geteilt durch die Anzahl der gewünschten Beschriftungsunterbrechungen ist (z. B. 140 * 0,25 = 35).

DanM
quelle