Saya merencanakan variabel kategori dan bukannya menunjukkan jumlah untuk setiap nilai kategori.
Saya mencari cara ggplot
untuk menampilkan persentase nilai dalam kategori itu. Tentu saja, dimungkinkan untuk membuat variabel lain dengan persentase yang dihitung dan plot yang satu, tetapi saya harus melakukannya beberapa kali dan saya berharap untuk mencapai itu dalam satu perintah.
Saya sedang bereksperimen dengan sesuatu seperti
qplot(mydataf) +
stat_bin(aes(n = nrow(mydataf), y = ..count../n)) +
scale_y_continuous(formatter = "percent")
tapi saya harus salah menggunakannya, karena saya mendapat kesalahan.
Untuk mereproduksi pengaturan dengan mudah, berikut ini contoh sederhana:
mydata <- c ("aa", "bb", NULL, "bb", "cc", "aa", "aa", "aa", "ee", NULL, "cc");
mydataf <- factor(mydata);
qplot (mydataf); #this shows the count, I'm looking to see % displayed.
Dalam kasus yang sebenarnya, saya mungkin akan menggunakan ggplot
alih-alih qplot
, tetapi cara yang tepat untuk menggunakan stat_bin masih menghindari saya.
Saya juga sudah mencoba empat pendekatan ini:
ggplot(mydataf, aes(y = (..count..)/sum(..count..))) +
scale_y_continuous(formatter = 'percent');
ggplot(mydataf, aes(y = (..count..)/sum(..count..))) +
scale_y_continuous(formatter = 'percent') + geom_bar();
ggplot(mydataf, aes(x = levels(mydataf), y = (..count..)/sum(..count..))) +
scale_y_continuous(formatter = 'percent');
ggplot(mydataf, aes(x = levels(mydataf), y = (..count..)/sum(..count..))) +
scale_y_continuous(formatter = 'percent') + geom_bar();
tapi semua 4 memberi:
Error: ggplot2 doesn't know how to deal with data of class factor
Kesalahan yang sama muncul untuk kasus sederhana
ggplot (data=mydataf, aes(levels(mydataf))) +
geom_bar()
jadi jelas sesuatu tentang bagaimana ggplot
berinteraksi dengan satu vektor. Aku menggaruk-garuk kepalaku, mencari kesalahan di Google hanya memberikan satu hasil .
Jawaban:
Karena ini dijawab, ada beberapa perubahan yang berarti pada
ggplot
sintaksis. Ringkas diskusi dalam komentar di atas:Berikut ini contoh yang dapat direproduksi menggunakan
mtcars
:Pertanyaan ini saat ini menjadi hit # 1 di google untuk 'jumlah ggplot vs persentase histogram' sehingga mudah-mudahan ini membantu menyaring semua informasi yang saat ini disimpan di komentar pada jawaban yang diterima.
Catatan: Jika
hp
tidak ditetapkan sebagai faktor, ggplot mengembalikan:sumber
percent
dengan paket itu dari untuk mendapatkan di atas berfungsi (saya lakukan).ggplot(mtcars, aes(x = factor(hp))) + geom_bar(aes(y = (..count..)/sum(..count..))) + scale_y_continuous(labels = scales::percent)
geom_bar(aes(y = (..count..)/tapply(..count..,..PANEL..,sum)[..PANEL..]))
saja. Setiap segi harus berjumlah 100%.kode yang dimodifikasi ini harus berfungsi
jika data Anda memiliki NAS dan Anda tidak ingin mereka dimasukkan dalam plot, kirimkan na.omit (mydataf) sebagai argumen ke ggplot.
semoga ini membantu.
sumber
formatter
argumen tidak akan berfungsi lagi. Sebaliknya, Anda akan menginginkan sesuatu sepertilabels = percent_format())
.scales
perpustakaan sebelum menggunakanpercent_format()
, jika tidak maka tidak akan berfungsi. 0.9.0 tidak secara otomatis memuat paket pendukung lagi.? stat_bin
. Itu menunjukkan apa kolom tambahan ditambahkan ke bingkai data olehggplot2
. Semua kolom tambahan berbentuk..variable..
.aes(y = (..count..)/sum(..count..))
dengan sederhanaaes(y = ..density..)
? Secara visual itu memberikan gambar yang sangat mirip (tapi masih berbeda)scales
perpustakaan terlebih dahulu , kemudian digunakanscale_y_continuous(labels=percent)
seperti yang disebutkan dalam dokumenDengan ggplot2 versi 2.1.0 itu
sumber
Pada Maret 2017, dengan
ggplot2
2.2.1 saya pikir solusi terbaik dijelaskan dalam Hadley Wickham's R untuk buku ilmu data:stat_count
menghitung dua variabel:count
digunakan secara default, tetapi Anda dapat memilih untuk menggunakanprop
yang menunjukkan proporsi.sumber
fill
pemetaan (tidak ada kesalahan yang dilemparkan, tetapi tidak ada warna isian yang ditambahkan).group = 1
untuk mendapatkan pemetaan isi. mungkin itu membantugroup
parameter, itu tidak menunjukkan persentase yang tepat, karena semuanya milik grup sendiri untuk setiap nilai x unik.Jika Anda ingin persentase pada sumbu y dan diberi label pada bilah:
Saat menambahkan label batang, Anda mungkin ingin menghilangkan sumbu y untuk bagan yang lebih bersih, dengan menambahkan pada bagian akhir:
sumber
Jika Anda ingin label persentase tetapi Ns aktual pada sumbu y, coba ini:
sumber
Berikut adalah solusi untuk data faceted. (Jawaban yang diterima oleh @Andrew tidak berfungsi dalam kasus ini.) Idenya adalah untuk menghitung nilai persentase menggunakan dplyr dan kemudian menggunakan geom_col untuk membuat plot.
Ini plotnya:
sumber
Perhatikan bahwa jika variabel Anda kontinu, Anda harus menggunakan geom_histogram (), karena fungsi akan mengelompokkan variabel dengan "bins".
sumber