2009-10-07 38 views
8

Tôi đã có một âm mưu tỷ lệ facet_wrap tốt đẹp mà tôi đã tạo bằng ggplo2. Tôi muốn cho mỗi bảng có nhãn trục x và y thay vì chỉ có nhãn trục y dọc theo phía bên trái và nhãn x dọc theo phía dưới. Những gì tôi có ngay bây giờ trông như thế này:Hiển thị nhiều nhãn trục bằng cách sử dụng ggplot2 với facet_wrap trong R

library(ggplot2) 
myGroups <- sample(c("Mo", "Larry", "Curly"), 100, replace=T) 
myValues <- rnorm(300) 
df <- data.frame(myGroups, myValues) 


p <- ggplot(df) + 
    geom_density(aes(myValues), fill = alpha("#335785", .6)) + 
    facet_wrap(~ myGroups) 
p 

nào trả về:

alt text http://www.cerebralmastication.com/wp-content/uploads/2009/10/3stooges.png

Nó có vẻ như điều này sẽ được đơn giản, nhưng Google Fu của tôi đã quá nghèo để tìm một câu trả lời.

Trả lời

8

Câu trả lời ngắn: Bạn không thể làm điều đó. Nó có thể có ý nghĩa với 3 đồ thị, nhưng nếu bạn có một mạng lưới lớn của 32 đồ thị thì sao? Điều đó sẽ trông ồn ào và tệ hại. Triết lý của GGplot là làm điều đúng đắn với tối thiểu tùy chỉnh, có nghĩa là, một cách tự nhiên, bạn không thể tùy chỉnh nhiều thứ như các gói khác.

Câu trả lời dài: Bạn có thể giả mạo nó bằng cách xây dựng ba đối tượng ggplot riêng biệt và kết hợp chúng. Nhưng nó không phải là một giải pháp rất chung chung. Dưới đây là một số mã từ cuốn sách của Hadley giả định bạn đã tạo các đối tượng ggplot a, b và c. Nó đặt ở hàng trên cùng, với b và c ở hàng dưới cùng.

grid.newpage() 
pushViewport(viewport(layout=grid.layout(2,2))) 
vplayout<-function(x,y) 
    viewport(layout.pos.row=x,layout.pos.col=y) 
print(a,vp=vplayout(1,1:2)) 
print(b,vp=vplayout(2,1)) 
print(c,vp=vplayout(2,2)) 
+0

Vâng tôi đã nhận được "bạn không phải làm điều đó" rung cảm từ ggplot. Tôi sẽ cố gắng thực hiện ví dụ bạn đã đưa ra. Điều đó có vẻ hợp lý. –

+2

Một điều bạn có thể thử, nếu bạn cần hình ảnh chất lượng xuất bản, là lưu biểu đồ sang định dạng PDF hoặc SVG (nếu bạn không ở trên Windows), sử dụng ggsave(), và sau đó chỉnh sửa hình ảnh kết quả bằng cách sử dụng một cái gì đó như Inkscape . Bạn có thể dễ dàng chuyển hình ảnh dưới xuống và sao chép trục lên ... – Harlan

10

Bạn có thể làm điều này bằng cách đưa vào quy mô = tùy chọn "tự do" trong cuộc gọi facet_wrap của bạn:

myGroups <- sample(c("Mo", "Larry", "Curly"), 100, replace=T) 
myValues <- rnorm(300) 
df <- data.frame(myGroups, myValues) 


p <- ggplot(df) + 
    geom_density(aes(myValues), fill = alpha("#335785", .6)) + 
    facet_wrap(~ myGroups, scales="free") 
p 
Các vấn đề liên quan