Bagaimana cara mengubah angka sumbu Y menjadi persentase di diagram batang?

107

Bagaimana kita bisa mengubah sumbu y menjadi persen seperti gambar? Saya dapat mengubah rentang sumbu y tetapi saya tidak dapat mengubahnya menjadi persen. masukkan deskripsi gambar di sini

Mus
sumber

Jawaban:

236

Menggunakan:

+ scale_y_continuous(labels = scales::percent)

Atau, untuk menentukan parameter pemformatan untuk persen:

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

(perintah labels = percentsudah usang sejak versi 2.2.1 dari ggplot2)

luchonacho
sumber
3
Saya suka Anda tidak perlu mengetik library(scales)untuk ini.
Akshay Gaur
Dan alasannya scales::percent(accuracy = 1)tidak berfungsi adalah karena *_format()versi membuat fungsi alih-alih ... apa pun yang dibuat percent()sendiri, apakah itu benar?
MokeEire
62

Pada prinsipnya, Anda dapat meneruskan fungsi pemformatan apa pun ke labelsparameter:

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

Atau

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

Contoh yang dapat direproduksi:

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
sumber
8
1 tanpa ketergantungan eksternal. Saya tahu bahwa karena Hadley adalah pengarang ggplot2 dan timbangan, ini seharusnya tidak terlalu menjadi masalah — tetapi solusi ini masih dihargai.
Mark White
44

ggplot2dan scalespaket dapat melakukannya:

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)

Sepertinya stat()opsi telah dilepas, menyebabkan pesan kesalahan. Coba ini:

library(scales)

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

myplot
Penguin_Knight
sumber
2

Dipinjam dari @Deena di atas, modifikasi fungsi untuk label lebih fleksibel dari yang Anda kira. Misalnya, saya memiliki ggplot di mana penyebut variabel yang dihitung adalah 140. Saya menggunakan contohnya sebagai berikut:

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

Ini memungkinkan saya untuk mendapatkan persentase saya pada penyebut 140, dan kemudian memecahkan skala dengan peningkatan 25% daripada angka aneh yang ditetapkan sebelumnya. Kuncinya di sini adalah pemutusan skala masih diatur oleh hitungan asli, bukan oleh persentase Anda. Oleh karena itu, pemutusan harus dari nol ke nilai penyebut, dengan argumen ketiga dalam "pemisah" menjadi penyebut dibagi dengan berapa pun pemutusan label yang Anda inginkan (misalnya 140 * 0,25 = 35).

DanM
sumber