2013-09-03 31 views
5

Tôi muốn group dữ liệu của mình dựa trên sự tương tác của hai biến, nhưng chỉ vẽ bản đồ thẩm mỹ cho một trong các biến đó. (Biến số khác đại diện cho các bản sao mà theo lý thuyết, tương đương với nhau). Tôi có thể tìm thấy những cách không thích hợp để làm điều này, nhưng có vẻ như phải có cách thanh lịch hơn để làm điều đó.`geom_line()` kết nối các điểm được ánh xạ tới các nhóm khác nhau

Ví dụ

# Data frame with two continuous variables and two factors 
set.seed(0) 
x <- rep(1:10, 4) 
y <- c(rep(1:10, 2)+rnorm(20)/5, rep(6:15, 2) + rnorm(20)/5) 
treatment <- gl(2, 20, 40, labels=letters[1:2]) 
replicate <- gl(2, 10, 40) 
d <- data.frame(x=x, y=y, treatment=treatment, replicate=replicate) 

ggplot(d, aes(x=x, y=y, colour=treatment, shape=replicate)) + 
    geom_point() + geom_line() 

enter image description here

này hầu hết được điều đó đúng, ngoại trừ việc tôi không muốn đại diện cho điểm với hình dạng khác nhau. Nó có vẻ như group=interaction(treatment, replicate) sẽ giúp (ví dụ dựa trên this question, nhưng geom_line() vẫn kết nối điểm trong các nhóm khác nhau:

ggplot(d, aes(x=x, y=y, colour=treatment, group=interaction("treatment", "replicate"))) + 
    geom_point() + geom_line() 

enter image description here

tôi có thể giải quyết vấn đề bằng cách thủ công tạo ra một cột tương tác và group ing bởi rằng:

d$interact <- interaction(d$replicate, d$treatment) 

ggplot(d, aes(x=x, y=y, colour=treatment, group=interact)) + 
    geom_point() + geom_line() 

enter image description here

nhưng có vẻ như cần phải có thêm ggplot2 cách -native để nhận được geom_line để chỉ kết nối các điểm từ cùng một nhóm.

+1

Tại sao bạn đặt 'tương tác (" xử lý "," sao chép ")' trong ví dụ thứ hai không phải tên thực tế của cột? Đối với tôi 'nhóm = tương tác (điều trị, nhân bản)' cho kết quả mong đợi –

+0

có thể trùng lặp của [nhóm bởi hai cột trong ggplot2] (http://stackoverflow.com/questions/9968976/group-by-two-columns-in- ggplot2) –

+0

Sự khác biệt là trong câu hỏi được trích dẫn (mà tôi muốn liên kết ban đầu, bây giờ đã chỉnh sửa để thêm liên kết) câu trả lời _does_ sử dụng dấu ngoặc kép - nhưng nó cũng sử dụng 'qplot'. Tôi đoán 'qplot' cần các biến trong dấu ngoặc kép, trong khi' ggplot' lấy chúng trực tiếp. –

Trả lời

5

Mã của bạn hoạt động nếu bạn làm như sau. Tôi nghĩ bạn gặp sự cố vì aes được xử lý "treat""replicate" làm vectơ, do đó, nó tương đương với group = 1.

ggplot(d, aes(x=x, y=y, colour=treatment, group=interaction(treatment, replicate))) + 
    geom_point() + geom_line()