ggplot2 กะฮิสโตแกรมยังไง?

Jan 15 2021

ฉันกำลังพยายามเรียนรู้ R และฉันเพิ่งเริ่มต้นด้วยการอ่านหนังสือ "Hands-On Programming with R" ฉันพบปัญหาและไม่สามารถดำเนินการต่อได้เพราะมันรบกวนจิตใจฉันมาก ในการออกกำลังกายฉันควรจะทดลองกับแพ็คเกจ ggplot2 และสร้างฮิสโตแกรม รหัสที่จะใช้มีดังนี้:

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

qplot(x, binwidth = 1)

และฮิสโตแกรมควรมีลักษณะเช่นนี้ในภาพที่หนึ่ง อย่างไรก็ตามเมื่อฉันเรียกใช้รหัสฮิสโตแกรมของฉันจะไม่เหมือนในภาพ (แม้ว่ามันควรจะเป็น) และดูเหมือนในรูปที่ 2 โดยพื้นฐานแล้วมันจะเหมือนกัน แต่มีทศนิยม 0.5 ทางด้านซ้ายของตำแหน่งที่ควรจะเป็น

ช่วยบอกหน่อยได้ไหมว่าทำไมฮิสโตแกรมถึงไม่เหมือนในรูปที่ 1 และจะแก้ไขโค้ดอย่างไรให้มันเป็นแบบนั้น

ภาพที่ 1: https://i.stack.imgur.com/dssBQ.jpg ภาพที่ 2: https://i.stack.imgur.com/wUk1i.jpg

คำตอบ

2 Peter Jan 15 2021 at 23:25

ฉันใช้ ggplot2_3.3.2 กับ R เวอร์ชัน 4.0.3

ฉันได้กราฟแบบเดียวกับที่คุณทำแทนที่จะเป็นพล็อตตามที่กำหนดไว้ https://rstudio-education.github.io/hopr/packages.html#packages-1.

ฉันไม่พบว่าหนังสือเล่มนี้ใช้ ggplot เวอร์ชันใดซึ่งอาจเป็นไปได้ว่าประมาณปี 2014 โดยอ้างอิงจากข้อความบางส่วน เมื่อนึกถึงความคิดเห็นของ @ the_one_neuron ฉันสงสัยว่าสิ่งนี้เกี่ยวข้องกับการเปลี่ยนแปลงใน ggplot2 ตั้งแต่เขียนหนังสือ

ปัญหาคือ 'ประตูและโพสต์' แบบ binning หรือมากกว่านั้น: คุณต้องการให้ค่า 1 ถูกจัดเก็บในช่องระหว่าง 1 ถึง <2 (ศูนย์กลางที่ 1.5) แทนที่จะเป็น 0 ถึง 1 (เน้นที่ 0.5)

มีคำอธิบายโดยละเอียดมากขึ้นจาก @ r2evans ที่เหตุใด geom_histogram จึงเริ่มต้นที่ขีด จำกัด ล่างของถังขยะเชิงลบแม้ว่าค่าทั้งหมดจะ> 0 ก็ตาม .

อย่างไรก็ตามนี่เป็นเรื่องเหลวไหลเพื่อให้ได้ผลลัพธ์ที่คล้ายกับกราฟที่คุณคาดไว้


library(ggplot2)

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

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

สร้างเมื่อ 2021-01-15 โดยแพ็คเกจ reprex (v0.3.0)

the_one_neuron Jan 15 2021 at 21:53

คุณสามารถลองทำสิ่งนี้ได้ มันไม่สมบูรณ์แบบ แต่มันใกล้มาก

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