2012-08-29 26 views
10

Tôi có một bảng như sau:Sử dụng geom_line với nhiều nhóm

> testsizes 
    size value replicate lane 
361 16 6898   1 L1 
362 17 10707   1 L1 
363 18 1786   1 L1 
364 19 1721   1 L1 
365 20 2454   1 L1 
421 16 8486   2 L1 
422 17 26691   2 L1 
423 18 3241   2 L1 
424 19 5068   2 L1 
425 20 7579   2 L1 
481 16 4152   3 L1 
482 17 4452   3 L1 
483 18 899   3 L1 
484 19 1973   3 L1 
485 20 2595   3 L1 
571 16 8284   1 L2 
572 17 9045   1 L2 
573 18 5041   1 L2 
574 19 7160   1 L2 
575 20 9730   1 L2 
631 16 5639   2 L2 
632 17 9773   2 L2 
633 18 2433   2 L2 
634 19 3017   2 L2 
635 20 3864   2 L2 
691 16 10161   3 L2 
692 17 18609   3 L2 
693 18 3760   3 L2 
694 19 3543   3 L2 
695 20 4257   3 L2 

> dput(testsizes) 
structure(list(size = c(16L, 17L, 18L, 19L, 20L, 16L, 17L, 18L, 
19L, 20L, 16L, 17L, 18L, 19L, 20L, 16L, 17L, 18L, 19L, 20L, 16L, 
17L, 18L, 19L, 20L, 16L, 17L, 18L, 19L, 20L), value = c(6898L, 
10707L, 1786L, 1721L, 2454L, 8486L, 26691L, 3241L, 5068L, 7579L, 
4152L, 4452L, 899L, 1973L, 2595L, 8284L, 9045L, 5041L, 7160L, 
9730L, 5639L, 9773L, 2433L, 3017L, 3864L, 10161L, 18609L, 3760L, 
3543L, 4257L), replicate = c("1", "1", "1", "1", "1", "2", "2", 
"2", "2", "2", "3", "3", "3", "3", "3", "1", "1", "1", "1", "1", 
"2", "2", "2", "2", "2", "3", "3", "3", "3", "3"), lane = c("L1", 
"L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", "L1", 
"L1", "L1", "L1", "L2", "L2", "L2", "L2", "L2", "L2", "L2", "L2", 
"L2", "L2", "L2", "L2", "L2", "L2", "L2")), .Names = c("size", 
"value", "replicate", "lane"), row.names = c(361L, 362L, 363L, 
364L, 365L, 421L, 422L, 423L, 424L, 425L, 481L, 482L, 483L, 484L, 
485L, 571L, 572L, 573L, 574L, 575L, 631L, 632L, 633L, 634L, 635L, 
691L, 692L, 693L, 694L, 695L), class = "data.frame") 

Tôi muốn thực hiện một âm mưu dòng sử dụng ggplot cho thấy sự thay đổi trong giá trị qua các kích thước. Tại thời điểm này tôi có điều này, trong số các kết hợp khác tôi đã cố gắng:

ggplot(testlengths, aes(size, value, group=replicate, colour=replicate)) 
    + geom_line() 

enter image description here

Dường như cố gắng của mình để kết hợp cả hai làn xe vào cùng một loạt. Nhưng tôi không thể tìm cách thiết lập các làn đường như một yếu tố khác để nhóm. Tôi muốn các dòng được nhóm dựa trên cả hai loại bản sao và làn đường. Các làn đường phải được tô màu nhưng các bản sao không cần phân biệt lẫn nhau.

Tôi biết rằng tôi có thể đạt được điều này bằng cách kết nối hai nhóm này thành một nhóm trước. Tuy nhiên, trước khi tôi đi xuống con đường đó, tôi đang lang thang nếu ggplot có thể nhóm nhiều hơn một nhóm trong một cốt truyện không có khía cạnh (tôi cần phải sử dụng các khía cạnh sau này cho một nhóm khác)? Tôi cảm thấy như nó sẽ có thể.

+0

Nope. Một thẩm mỹ -> một biến. – joran

+0

Ồ đúng. Được thôi. :( – MattLBeck

+0

Nhưng bạn có thể sử dụng 'lane' như một khía cạnh, với' facet_wrap (~ lane) ', ví dụ – Andrie

Trả lời

32

Dựa tắt nhận xét của tôi về tương tác hai:

ggplot(testsizes, aes(x = size, y = value, 
         group = interaction(replicate, lane), 
         colour = lane)) + 
geom_line() 

Mà cho:

enter image description here

+1

Rất vui khi thấy tùy chọn ở đó nếu cần. Cảm ơn đã cho tôi thấy điều này! – MattLBeck

5

Như @joran đã chỉ ra, nếu ggplot có thể tự làm điều này, nó sẽ đơn giản là ghép nối hai nhóm. Vì vậy, concatenating hai nhóm bản thân mình là đúng cách để đi và mang lại cho tôi những kết quả mong muốn:

> testlengths$replane <- paste(testlengths$replicate, testlengths$lane, sep="_") 

> testlengths 
    size value replicate lane replane 
361 16 6898   1 L1 1_L1 
362 17 10707   1 L1 1_L1 
363 18 1786   1 L1 1_L1 
364 19 1721   1 L1 1_L1 
365 20 2454   1 L1 1_L1 
421 16 8486   2 L1 2_L1 
422 17 26691   2 L1 2_L1 
423 18 3241   2 L1 2_L1 
424 19 5068   2 L1 2_L1 
425 20 7579   2 L1 2_L1 
481 16 4152   3 L1 3_L1 
482 17 4452   3 L1 3_L1 
483 18 899   3 L1 3_L1 
484 19 1973   3 L1 3_L1 
485 20 2595   3 L1 3_L1 
571 16 8284   1 L2 1_L2 
572 17 9045   1 L2 1_L2 
573 18 5041   1 L2 1_L2 
574 19 7160   1 L2 1_L2 
575 20 9730   1 L2 1_L2 
631 16 5639   2 L2 2_L2 
632 17 9773   2 L2 2_L2 
633 18 2433   2 L2 2_L2 
634 19 3017   2 L2 2_L2 
635 20 3864   2 L2 2_L2 
691 16 10161   3 L2 3_L2 
692 17 18609   3 L2 3_L2 
693 18 3760   3 L2 3_L2 
694 19 3543   3 L2 3_L2 
695 20 4257   3 L2 3_L2 

> ggplot(testlengths, aes(size, value, group=replane, colour=lane)) 
    + geom_line() 

enter image description here

Tôi đoán đạo đức ở đây là để làm càng nhiều tiền xử lý của bảng của bạn như bạn có thể trước khi đưa ra nó để ggplot.

+1

Tôi không đồng ý, một trong những điểm mạnh của ggplot được xây dựng trong chức năng có thể chuyển đổi và tóm tắt dữ liệu, ví dụ: 'stat_summary'. Điều này có thể chỉ là một trong những ngoại lệ khó xử khi nó không thành công, ngay cả khi nó dễ dàng xử lý. – Andy

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