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

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)


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, "%"))

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

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).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.