2012-05-30 38 views
11

Sử dụng ggplot, có thể nhận các trục x/y "kiểu R" không đáp ứng tại gốc và thay vào đó bao gồm hai dải bị ngắt kết nối, như trong ví dụ sau?Trục kiểu R với ggplot

enter image description here

Lý do ở đây chủ yếu là để có được ggplot lô nhìn phù hợp bên cạnh những người tinh khiết-R.

+3

điều này đặt ra câu hỏi, tại sao không tạo các ô cơ sở [trông giống như ggplot2?] (Http://rwiki.sciviews.org/doku.php?id=tips:graphics-misc:ggplot2theme_inbase);) – baptiste

+0

Bởi vì tôi có thể không cập nhật cũng như làm lại các ô cơ bản. Tôi đã thực sự xem xét việc chỉnh sửa SVG của các ggplot tạo ra, nhưng đó là một hack. – Christian

+0

Nếu bạn muốn số hóa các ô cơ bản, bạn có thể thử gói 'số hóa'. – mnel

Trả lời

13

Hãy thử điều này,

library(ggplot2) 

d <- data.frame(x=1:10, y=rnorm(10)) 

base_breaks_x <- function(x){ 
    b <- pretty(x) 
    d <- data.frame(y=-Inf, yend=-Inf, x=min(b), xend=max(b)) 
    list(geom_segment(data=d, aes(x=x, y=y, xend=xend, yend=yend), inherit.aes=FALSE), 
     scale_x_continuous(breaks=b)) 
} 
base_breaks_y <- function(x){ 
    b <- pretty(x) 
    d <- data.frame(x=-Inf, xend=-Inf, y=min(b), yend=max(b)) 
    list(geom_segment(data=d, aes(x=x, y=y, xend=xend, yend=yend), inherit.aes=FALSE), 
     scale_y_continuous(breaks=b)) 
} 

ggplot(d, aes(x,y)) + 
    geom_point() + 
    theme_bw() + 
    theme(panel.border = element_blank(), 
     panel.grid.major = element_blank(), 
     panel.grid.minor = element_blank()) + 
    base_breaks_x(d$x) + 
    base_breaks_y(d$y) 

screenshot

Chỉnh sửa: a related issue has since been discussed trong gói ggtheme, và có khả năng cung cấp một giải pháp sạch (không cần phải cung cấp dữ liệu một cách rõ ràng để phá vỡ chức năng).

+0

Rất đẹp! Tôi nghĩ về việc sử dụng opts (axis.line = theme_line()), nhưng tôi nhận được các lỗi rất lạ ở đó ... –

+0

Vâng, được thực hiện tốt - cảm ơn! – Christian

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