2010-08-31 38 views
249

tôi âm mưu như sau:Làm cách nào để đặt giới hạn cho các trục trong ô ggplot2 R?

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) 

Bây giờ nói rằng tôi chỉ muốn âm mưu khu vực giữa x=-5000-5000, thay vì toàn bộ phạm vi.

Tôi có thể làm như thế nào?

Trả lời

418

Về cơ bản bạn có hai lựa chọn

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

hoặc

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

Trường hợp đầu tiên loại bỏ tất cả các điểm dữ liệu ngoài phạm vi nhất định và chỉ đứng sau điều chỉnh vùng hiển thị. Trong hầu hết các trường hợp, bạn sẽ không thấy sự khác biệt, nhưng nếu bạn phù hợp với bất kỳ dữ liệu nào, nó có thể sẽ thay đổi các giá trị được trang bị.

Bạn cũng có thể sử dụng chức năng tốc ký xlim (hoặc ylim), mà như các tùy chọn đầu tiên loại bỏ các điểm dữ liệu bên ngoài phạm vi nhất định:

+ xlim(-5000, 5000) 

Để biết thêm thông tin kiểm tra các mô tả về coord_cartesian.

RStudio cheatsheet cho ggplot2 làm cho điều này khá rõ ràng trực quan. Đây là một phần nhỏ của cheatsheet rằng:

enter image description here

Distributed dưới CC BY.

+12

hiện cũng có 'thư viện (tỷ lệ); ... + scale_x_continuous (limits = c (-5000, 5000), oob = squish) '(mặc định là' oob = censor'); xem '? squish','? censor': https://groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU –

+5

NB. điều này có thể có vấn đề nếu bạn đang xử lý các dòng/đa giác nơi một số đỉnh nằm ngoài giới hạn, vì toàn bộ đối tượng được lấy ra khỏi ô – geotheory

+0

@geotheory: điều đó cũng đúng với cách tiếp cận 'coord_cartesian'? –

18

Lưu ý nhanh: nếu bạn cũng đang sử dụng coord_flip() để lật trục x và trục y, bạn sẽ không thể đặt giới hạn phạm vi bằng cách sử dụng coord_cartesian() vì hai chức năng đó là độc quyền (xem here).

May mắn thay, đây là cách khắc phục dễ dàng; đặt giới hạn của bạn trong phạm vi coord_flip() như vậy:

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

Điều này chỉ làm thay đổi phạm vi hiển thị (nghĩa là không xóa điểm dữ liệu).

Các vấn đề liên quan