ggplot2 กะฮิสโตแกรมยังไง?
ฉันกำลังพยายามเรียนรู้ 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
คำตอบ
ฉันใช้ 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)
คุณสามารถลองทำสิ่งนี้ได้ มันไม่สมบูรณ์แบบ แต่มันใกล้มาก
qplot(x, binwidth = 1, xlim =c(0,NA), ylab = "count")