จะกำหนดขีด จำกัด สำหรับแกนในแปลง ggplot2 R ได้อย่างไร?


358

ฉันพล็อตต่อไปนี้:

library(ggplot2)    

carrots <- data.frame(length = rnorm(500000, 10000, 10000))
cukes <- data.frame(length = rnorm(50000, 10000, 20000))
carrots$veg <- 'carrot'
cukes$veg <- 'cuke'
vegLengths <- rbind(carrots, cukes)

ggplot(vegLengths, aes(length, fill = veg)) +
 geom_density(alpha = 0.2)

ทีนี้พูดว่าฉันแค่ต้องการพล็อตพื้นที่ระหว่างx=-5000ถึง5000แทนช่วงทั้งหมด

ฉันจะทำสิ่งนั้นได้อย่างไร

คำตอบ:


584

โดยทั่วไปคุณมีสองตัวเลือก

scale_x_continuous(limits = c(-5000, 5000))

หรือ

coord_cartesian(xlim = c(-5000, 5000)) 

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

คุณยังสามารถใช้ฟังก์ชันชวเลขxlim(หรือylim) ซึ่งเช่นเดียวกับตัวเลือกแรกจะลบจุดข้อมูลออกนอกช่วงที่กำหนด:

+ xlim(-5000, 5000)

coord_cartesianสำหรับข้อมูลเพิ่มเติมโปรดตรวจสอบรายละเอียดของ

cheatsheet RStudioสำหรับggplot2ยี่ห้อนี้ค่อนข้างชัดเจนสายตา นี่คือส่วนเล็ก ๆ ของ cheatsheet นั้น:

ป้อนคำอธิบายรูปภาพที่นี่

เผยแพร่ภายใต้CC BY


16
นอกจากนี้ยังมีตอนนี้library(scales); ... + scale_x_continuous(limits = c(-5000, 5000), oob=squish)(ค่าเริ่มต้นคือoob=censor); ดู?squish, ?censor: groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU
เบน Bolker

5
NB นี่อาจเป็นปัญหาหากคุณกำลังติดต่อกับเส้น / รูปหลายเหลี่ยมที่จุดยอดบางจุดอยู่นอกขีด จำกัด เนื่องจากวัตถุทั้งหมดถูกลบออกจากพล็อต
geotheory

1
@geotheory: นั่นเป็นความจริงของcoord_cartesianวิธีการนี้ด้วยหรือไม่
Nick Stauner

1
ไม่ฉันควรจะเจาะจงมากขึ้นเพียงวิธีแรก
geotheory

ในทางปฏิบัติสำหรับวัตถุประสงค์ 'การพิมพ์' coord_cartesian(xlim = คุณอาจต้องรีเซ็ตylimเช่นกันและรีเซ็ตป้ายผนึกและเส้นแบ่งตาราง
PatrickT

44

บันทึกย่ออย่างรวดเร็ว: หากคุณใช้coord_flip()เพื่อพลิกแกน x และแกน y คุณจะไม่สามารถตั้งค่าขีด จำกัด ของช่วงได้coord_cartesian()เนื่องจากฟังก์ชั่นทั้งสองนั้นเป็นเอกสิทธิ์ (ดูที่นี่ )

โชคดีที่นี่เป็นวิธีแก้ไขที่ง่าย กำหนดวงเงินของคุณภายในcoord_flip()ดังนี้:

p + coord_flip(ylim = c(3,5), xlim = c(100, 400))

นี่แค่เปลี่ยนช่วงที่มองเห็นได้ (เช่นไม่ลบจุดข้อมูล)


ฉันคล้ายกัน แต่คำถามที่ยากขึ้นโพสต์ที่นี่ stackoverflow.com/questions/61531149/…เกี่ยวกับวิธี จำกัด ด้านเดียวเท่านั้น
IVIM
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.