Jak mogę zmienić wartości na osi Y na wartości procentowe na wykresie słupkowym?


107

Jak możemy zmienić oś y na procent, jak na rysunku? Mogę zmienić zakres osi y, ale nie mogę zrobić tego w procentach. wprowadź opis obrazu tutaj

Odpowiedzi:


237

Posługiwać się:

+ scale_y_continuous(labels = scales::percent)

Lub, aby określić parametry formatowania procentu:

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

(polecenie labels = percentjest przestarzałe od wersji 2.2.1 ggplot2)


3
Podobało mi się, że nie musisz pisać library(scales)w tym celu.
Akshay Gaur,

Powód scales::percent(accuracy = 1)nie działa, ponieważ *_format()wersje tworzą funkcję zamiast ... cokolwiek percent()tworzy samodzielnie, czy to prawda?
MokeEire

62

Zasadniczo możesz przekazać dowolną funkcję ponownego formatowania do labelsparametru:

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

Lub

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

Powtarzalny przykład:

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 za brak zewnętrznej zależności. Wiem, że skoro Hadley jest autorem zarówno ggplot2, jak i skal, nie powinno to mieć większego znaczenia - ale to rozwiązanie jest nadal doceniane.
Mark White

44

ggplot2a scalespakiety mogą to zrobić:

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)

Wygląda na to, że stat()opcja została wyłączona, powodując komunikat o błędzie. Spróbuj tego:

library(scales)

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

myplot

2

Zapożyczona od @Deena powyżej, ta modyfikacja funkcji etykiet jest bardziej wszechstronna, niż mogłoby się wydawać. Na przykład miałem ggplot, w którym mianownik zliczanych zmiennych wynosił 140. Użyłem jej przykładu w ten sposób:

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

Pozwoliło mi to uzyskać moje procenty na mianowniku 140, a następnie przełamać skalę przy przyrostach 25% zamiast dziwnych liczb, które domyślnie. Kluczowe jest tutaj to, że podziały skali są nadal ustalane przez pierwotną liczbę, a nie przez twoje procenty. Dlatego przerwy muszą znajdować się od zera do wartości mianownika, a trzeci argument w „przerwach” to mianownik podzielony przez dowolną liczbę podziałów etykiet (np. 140 * 0,25 = 35).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.