2015-07-25 15 views
6

Xét đoạn mã sau:Làm cách nào để đặt các dấu ngắt và nhãn khác nhau trên vảy khi dữ liệu mặt trong ggplot2?

library(ggplot2)  
data = data.frame(x = c(1, 2, 
         3, 4, 
         5, 6), 
        label = c("foo", "bar", 
          "bar", "baz", 
          "baz", "boo"), 
        type = c(1, 1, 
          2, 2, 
          3, 3)) 
ggplot(data, aes(x = x, y = c(1))) + 
    labs(x = "", y = "") + 
    theme_bw() + 
    facet_wrap(~ type, ncol = 1, scales = "free_x") + 
    scale_x_discrete(aes(breaks = x, labels=label), limits = 1:6) + 
    geom_point() 

Nó tạo ra hình ảnh:

image plot

Vấn đề là scale_x_discrete() tôi được bỏ qua. Tôi muốn quy mô x của từng mặt để hiển thị các nhãn trong data$label, nhưng chỉ ở nơi có dữ liệu. Nói cách khác, tôi muốn một cái gì đó như thế này, nhưng trên một biểu đồ duy nhất:

facet

facet

facet

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

+1

Tôi nghĩ rằng có một lỗi đánh máy trong mã của bạn, để tạo ra những bảng xếp hạng bạn cần: 'ggplot (dữ liệu, aes (x = x, y = c (1))) 'thay vì' ggplot (dữ liệu, aes (x = x, y = c (0))) ' – mpalanco

+0

Bạn nói đúng. Tôi đã sửa mã, cảm ơn. –

Trả lời

3

Bạn có thể cần phải xây dựng các lô riêng biệt, sau đó kết hợp chúng bằng cách sử grid.arrange:

library(ggplot2)  
data = data.frame(x = c(1, 2, 
         3, 4, 
         5, 6), 
        label = c("foo", "bar", 
          "bar", "baz", 
          "baz", "boo"), 
        type = c(1, 1, 
          2, 2, 
          3, 3)) 

library(gridExtra) # Using V 2.0.0 

p = list() 

for(i in 1:3) { 

df = subset(data, type == i) 

p[[i]] = ggplot(df, aes(x = x, y = c(1))) + 
    labs(x = "", y = "") + 
    theme_bw() + 
    expand_limits(x = c(1, 6)) + 
    facet_wrap(~ type, ncol = 1) + 
    scale_x_continuous(breaks = df$x, labels = df$label) + 
    geom_point() 
    } 

grid.arrange(grobs = p, ncol = 1) 

enter image description here

+0

Hi Sandy, bạn có thể giữ các giới hạn trên tất cả x quy mô giống nhau không? Tôi đã thử sửa đổi mã của bạn nhưng không thể làm điều đó. –

+0

Tôi đã thay đổi cốt truyện và mã. Tôi có hiểu thời gian này không? –

+0

Vâng, đó cũng là những gì tôi đã làm. Có vẻ như không có cách nào để làm những gì chúng tôi đang cố gắng với một cốt truyện duy nhất. Tôi sẽ chấp nhận câu trả lời của bạn. Cảm ơn bạn đã giúp đỡ! –

2

Thay đổi đối số thành scales = "free". Tôi đã sửa đổi ví dụ thêm 'y = type` thay vì hằng số c (1) để có các thang khác nhau.

ggplot(data, aes(x = x, y = type)) + 
    labs(x = "", y = "") + 
    theme_bw() + 
    facet_wrap(~ type, ncol = 1, scales = "free") + 
    scale_x_discrete(aes(breaks = x), labels = data$label, limits = 1:6) + 
    geom_point() 

enter image description here

Sử dụng scales = "free_y"

ggplot(data, aes(x = x, y = type)) + 
    labs(x = "", y = "") + 
    theme_bw() + 
    facet_wrap(~ type, ncol = 1, scales = "free_y") + 
    scale_x_discrete(aes(breaks = x), labels = data$label, limits = 1:6) + 
    geom_point() 

enter image description here

ggplot(data, aes(x = label, y = type)) + 
    labs(x = "", y = "") + 
    theme_bw() + 
    facet_wrap(~ type, ncol = 1, scales = "free") + 
    geom_point() 

enter image description here

+0

@nongkrong Không chắc chắn nếu điều này là gần gũi hơn với câu hỏi mà OP có trong tâm trí. – mpalanco

+0

có biến 'PANEL' bạn có thể sử dụng – jenesaisquoi

+0

@mpalanco cảm ơn câu trả lời của bạn, nhưng điều này không hiệu quả đối với tôi. Những gì tôi đang tìm kiếm là biểu đồ đầu tiên của bạn, nhưng với trục phá vỡ khác nhau cho mỗi khía cạnh. Người đầu tiên nên có chỉ foo và bar, thanh thứ hai và baz, baz thứ ba và boo. 'Y' phải là hằng số. Điều tôi đang cố gắng hiển thị là thay đổi về thời gian. Mỗi 'loại' có nghĩa là một thời gian: t1, t2 và t3, và vị trí của dữ liệu thay đổi theo thời gian. Bạn có thể thấy rằng 'bar' thay đổi từ 2 tại t1 thành 3 tại t2, và' baz' thay đổi từ 3 tại t2 thành 4 tại t3. Đó là lý do tại sao các vi phạm phải khác nhau trên mỗi khía cạnh. –

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