จำกัด ggplot2 แกนโดยไม่ต้องลบข้อมูล (นอกขีด จำกัด ): ซูม


106

หากคุณระบุขีด จำกัด แกนใน ggplot จุดรอบนอกจะถูกลบออก วิธีนี้ใช้ได้ดีสำหรับจุด แต่คุณอาจต้องการพล็อตเส้นที่ตัดกับช่วงที่ระบุ แต่ ggplot rangeหรือxlim/ylimวิธีการจะลบสิ่งเหล่านี้ มีวิธีอื่นในการระบุช่วงแกนของพล็อตโดยไม่ต้องลบข้อมูลภายนอกหรือไม่?

เช่น

require(ggplot2)
d = data.frame(x=c(1,4,7,2,9,7), y=c(2,5,4,10,5,3), grp=c('a','a','b','b','c','c'))
ggplot(d, aes(x, y, group=grp)) + geom_line()
ggplot(d, aes(x, y, group=grp)) + geom_line() + scale_y_continuous(limits=c(0,7))
ggplot(d, aes(x, y, group=grp)) + geom_line() + ylim(0,7)

คำตอบ:


170

Hadley อธิบายเรื่องนี้ในหน้า 99; 133 เล่มของเขาggplot2 (พิมพ์ครั้งที่ 1)หรือหน้า 160 - 161 ถ้าคุณมีฉบับที่สองรุ่นที่สอง

ปัญหาก็คืออย่างที่คุณพูดlimitsภายในมาตราส่วนหรือการตั้งค่าylim()ทำให้ข้อมูลถูกโยนทิ้งไปเนื่องจากพวกเขากำลัง จำกัด ข้อมูล สำหรับการซูมที่แท้จริง (เก็บข้อมูลทั้งหมดไว้) คุณต้องตั้งค่าขีด จำกัด ภายในระบบพิกัดคาร์ทีเซียน (หรือระบบพิกัดอื่น ๆhttps://ggplot2.tidyverse.org/reference/#section-coordinate-systems ) สำหรับข้อมูลเพิ่มเติมโปรดดู: http://docs.ggplot2.org/current/coord_cartesian.html

ggplot(d, aes(x, y, group=grp)) + 
    geom_line() + 
    coord_cartesian(ylim=c(0, 7))

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


2
เกิดอะไรขึ้นถ้า coord_cartesian ไม่ได้ตัวเลือกเพราะผมใช้geom_boxplot?
Everettss

3
coord_cartesianยังคงเป็นตัวเลือกที่มีgeom_boxplotหรือ geoms อื่น ๆ
eipi10

ใช่ แต่คิดไม่ออกว่าจะทำบ็อกซ์พล็อตแนวนอนได้อย่างไรเนื่องจากต้องใช้coord_flipและคุณไม่สามารถมีสอง coords ได้
jtr13

2
ไม่เป็นไรคุณสามารถตั้งค่า ylim coord_flipแทนcoord_cartesianในกรณีนั้นได้
jtr13
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.