2012-05-11 17 views

Trả lời

29

Cho rằng breaks trong tỷ lệ có thể có một chức năng, tôi sẽ tưởng tượng rằng bạn có thể quấn thuật toán ngắt cơ bản trong một hàm không cho phép không phải số nguyên.

Bắt đầu với một ví dụ:

ggplot(mtcars, aes(wt, mpg)) + 
geom_point() + 
facet_grid(am+cyl~., scales="free_y") 

enter image description here

Nhìn vào cách scales::pretty_breaks được đặt lại với nhau, tạo ra một chức năng mà kết thúc tốt đẹp nó và chỉ cho phép số nguyên phá vỡ thông qua:

library("scales") 
integer_breaks <- function(n = 5, ...) { 
    breaker <- pretty_breaks(n, ...) 
    function(x) { 
    breaks <- breaker(x) 
    breaks[breaks == floor(breaks)] 
    } 
} 

Bây giờ sử dụng hàm này trả về dưới dạng hàm breaks trong tỷ lệ

ggplot(mtcars, aes(wt, mpg)) + 
geom_point() + 
facet_grid(am+cyl~., scales="free_y") + 
scale_y_continuous(breaks = integer_breaks()) 

enter image description here

+0

+1 đẹp, tôi đã không nhận thấy rằng quy mô có thể mất một chức năng – baptiste

+0

này là rất tốt, cảm ơn bạn rất nhiều. Tôi cũng không biết về pretty_breaks nên tham khảo của bạn rất hữu ích vì tôi định sử dụng nó rất nhiều. – MikeTP

7

tôi có thể thiếu một cái gì đó ở đây, nhưng tôi sẽ làm một cái gì đó như thế này.

library(ggplot2) 
ggplot(mtcars, aes(wt, mpg)) + 
    geom_point() + 
    facet_grid(am+cyl~., scales="free_y", space = "free_y") + 
    scale_y_continuous(breaks = seq(0, 40, 2), expand = c(0, 1)) 

enter image description here

+0

Cảm ơn bạn rất nhiều. Tôi nghĩ rằng giải pháp của bạn hoạt động tốt nếu bạn biết trước nơi để thiết lập các vi phạm, trong khi với Brian Diggs anwser bạn không cần biết trước. Tôi đánh giá cao sự giúp đỡ của bạn và tôi thấy việc sử dụng anwser của bạn: space = "free_y" và expand = c (0, 1) để được đặc biệt thông tin vì tôi không biết các tính năng đó. – MikeTP

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