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


358

Tôi vẽ như sau:

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đến 5000, thay vì toàn bộ phạm vi.

Làm thế nào tôi có thể làm điều đó?

Câu trả lời:


584

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

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

hoặc là

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

Trong đó điểm đầu tiên loại bỏ tất cả các điểm dữ liệu ngoài phạm vi đã cho và điểm thứ hai chỉ đ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), giống như tùy chọn đầu tiên loại bỏ các điểm dữ liệu ngoài phạm vi đã cho:

+ xlim(-5000, 5000)

Để biết thêm thông tin kiểm tra mô tả của coord_cartesian.

Chiếc áo choàng RStudio cho ggplot2điều này khá rõ ràng về mặt trực quan. Đây là một phần nhỏ của chiếc áo đó:

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

Phân phối theo CC BY .


16
bây giờ cũng có library(scales); ... + scale_x_continuous(limits = c(-5000, 5000), oob=squish)(mặc định là oob=censor); xem ?squish, ?censor: Groups.google.com/forum/#!topic/ggplot2/AsJ6xpmR9tU
Ben Bolker

5
Lưu ý điều này có thể có vấn đề nếu bạn xử lý các đường / đa giác trong đó một số đỉnh nằm ngoài giới hạn, vì toàn bộ đối tượng bị xóa khỏi cốt truyện
geotheory

1
@geotheory: điều đó cũng đúng với coord_cartesiancách tiếp cận phải không?
Nick Stauner

1
Không, tôi nên nói cụ thể hơn, chỉ là phương pháp đầu tiên
geotheory

Trong thực tế, với mục đích 'in', có coord_cartesian(xlim = lẽ bạn cũng cần phải thiết lập lại ylimvà đặt lại nhãn và ngắt lưới.
PatrickT

44

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 sử dụng coord_cartesian()vì hai chức năng này là độc quyền (xem tại đây ).

May mắn thay, đây là một sửa chữa dễ dàng; đặt giới hạn của bạn trong khoảng 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 các điểm dữ liệu).


Tôi có câu hỏi tương tự nhưng khó hơn được đăng ở đây stackoverflow.com/questions/61531149/ trên cách giới hạn CHỈ
MỘT MẮT
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.