ggplot2, bagaimana cara menggeser histogram?

Jan 15 2021

Saya mencoba mempelajari R dan saya baru memulainya dengan membaca buku "Pemrograman Praktis dengan R". Saya mengalami masalah dan tidak dapat melanjutkan karena itu sangat mengganggu saya. Sebagai latihan, saya harus bereksperimen dengan paket ggplot2 dan membuat histogram. Kode yang akan digunakan adalah sebagai berikut:

x <- c(1, 2, 2, 2, 3, 3)

qplot(x, binwidth = 1)

dan histogram akan terlihat seperti pada gambar satu. Namun, ketika saya menjalankan kode histogram saya tidak terlihat seperti yang ada di gambar (meskipun seharusnya) dan terlihat seperti di gambar 2. Pada dasarnya sama tetapi 0,5 desimal di sebelah kiri tempat yang seharusnya.

Bisakah beberapa orang memberi tahu saya mengapa histogram tidak terlihat sama seperti pada gambar 1 dan bagaimana cara memperbaiki kode agar terlihat seperti itu?

Gambar 1: https://i.stack.imgur.com/dssBQ.jpg Gambar 2: https://i.stack.imgur.com/wUk1i.jpg

Jawaban

2 Peter Jan 15 2021 at 23:25

Saya menggunakan ggplot2_3.3.2 dengan R versi 4.0.3.

Saya mendapatkan grafik yang sama seperti yang Anda lakukan daripada plot seperti yang ditetapkan di https://rstudio-education.github.io/hopr/packages.html#packages-1.

Saya tidak bisa menemukan versi ggplot mana yang digunakan dalam buku ini, kemungkinan dari sekitar tahun 2014 berdasarkan beberapa teks. Mengingat komentar @ the_one_neuron, saya curiga ini ada hubungannya dengan perubahan pada ggplot2 sejak buku itu ditulis.

Masalahnya adalah salah satu dari binning atau lebih bahasa sehari-hari 'gates and posts': Anda ingin nilai 1 menjadi binning antara 1 dan <2 (berpusat pada 1,5) daripada antara 0 dan 1 (berpusat pada 0,5).

Ada penjelasan yang lebih detil dari @ r2evans di Mengapa geom_histogram dimulai dari batas bawah bin negatif padahal semua nilai> 0? .

Anyways, inilah fudge untuk mendapatkan hasil yang mirip dengan grafik yang Anda harapkan.


library(ggplot2)

x <- c(1, 2, 2, 2, 3, 3)

qplot(x, binwidth = 1, breaks = 1:4 - 0.000001, xlim = c(0, 4))

Dibuat pada 2021-01-15 oleh paket reprex (v0.3.0)

the_one_neuron Jan 15 2021 at 21:53

Anda bisa mencoba melakukan sesuatu seperti ini. Itu tidak sempurna tapi sangat dekat

qplot(x, binwidth = 1, xlim =c(0,NA), ylab = "count")