Giới hạn trục ggplot2 mà không xóa dữ liệu (giới hạn bên ngoài): thu phóng


106

Nếu bạn chỉ định giới hạn trục trong ggplot, các điểm bên ngoài sẽ bị loại bỏ. Điều này là tốt cho các điểm, nhưng bạn có thể muốn vẽ các đường giao nhau với phạm vi được chỉ định, nhưng ggplot's rangehoặc xlim/ylimcác phương thức loại bỏ chúng. Có cách nào khác để chỉ định phạm vi trục biểu đồ mà không xóa dữ liệu bên ngoài không?

ví dụ

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)

Câu trả lời:


168

Hadley giải thích điều này trên trang 99; 133 trong cuốn sách ggplot2 của anh ấy (ấn bản đầu tiên) , hoặc trang 160 - 161 nếu bạn có ấn bản thứ hai .

Vấn đề là, như bạn nói, limitsbên trong thang đo hoặc cài đặt ylim()khiến dữ liệu bị loại bỏ, vì chúng đang hạn chế dữ liệu. Để thu phóng thực sự (giữ tất cả dữ liệu), bạn cần đặt giới hạn bên trong hệ tọa độ Descartes (hoặc các hệ tọa độ khác https://ggplot2.tidyverse.org/reference/#section-coosystem-systems ). Để biết thêm, hãy xem: http://docs.ggplot2.org/current/coord_cartesian.html

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

nhập mô tả hình ảnh ở đây


2
Điều gì sẽ xảy ra nếu coord_cartesian không phải là một tùy chọn vì tôi sử dụng geom_boxplot?
Everettss

3
coord_cartesianvẫn là một tùy chọn với geom_boxplothoặc các geom khác.
eipi10

Có, nhưng không thể tìm ra cách làm ô vuông ngang vì điều đó yêu cầu coord_flipvà bạn không thể có hai coords.
jtr13

2
Đừng bận tâm, bạn có thể đặt ylim's coord_flipthay vì coord_cartesiantrong trường hợp đó.
jtr13
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.