2012-02-10 34 views
11

Vì vậy, tôi có một tải trọng của dữ liệu mà tôi đã lấy mẫu làm ví dụ dưới đây:ngăn xếp Thứ tự theo quy mô trong một ggplot2 xếp chồng lên nhau biểu đồ hình cột

Sequence Abundance Length 
CAGTG 3  25 
CGCTG 82  23 
GGGAC 4  25 
CTATC 16  23 
CTTGA 14  25 
CAAGG 9  24 
GTAAT 5  24 
ACGAA 32  22 
TCGGA 10  22 
TAGGC 30  21 
TGCCG 25  21 
TCCGG 2  21 
CGCCT 22  24 
TTGGC 4  22 
ATTCC 4  23 

Tôi chỉ hiển thị 4 chữ đầu tiên của mỗi chuỗi đây, nhưng trong thực tế chúng là "Chiều dài" dài. Tôi đang xem xét sự phong phú của các trình tự cho mỗi lớp kích thước mà tôi có ở đây. Ngoài ra, tôi muốn hình dung tỷ lệ phong phú mà một chuỗi cụ thể đại diện trong lớp kích thước của nó. Hiện nay, tôi có thể làm cho một biểu đồ hình cột xếp chồng lên nhau như thế này:

ggplot(tab, aes(x=Length, y=Abundance, fill=Sequence)) 
    + geom_bar(stat='identity') 
    + opts(legend.position="none") 

ggplot stacked bar graph of the sample data

Điều này là tốt cho một dữ liệu nhỏ thiết lập như thế này, nhưng tôi có khoảng 1,7 triệu hàng trong tập dữ liệu thực tế của tôi. Nó trông rất đầy màu sắc và tôi có thể thấy rằng các chuỗi đặc biệt giữ một sự phong phú đa số trong một lớp học kích thước nhưng nó là rất lộn xộn.

Tôi muốn có thể đặt hàng các thanh xếp chồng lên nhau cho từng kích thước theo độ phong phú của chuỗi đó. nghĩa là các thanh có độ phong phú cao nhất trong ngăn xếp của chúng nằm ở cuối mỗi ngăn xếp và các thanh có độ phong phú thấp nhất nằm ở trên cùng. Nó sẽ trông rất nhiều theo cách đó.

Bất kỳ ý tưởng nào về cách thực hiện điều này trong ggplot2? Tôi biết có một "thứ tự" tham số trong aes() nhưng tôi không thể làm việc ra những gì nó nên làm gì với dữ liệu ở định dạng mà tôi có.

+1

@ gsk3 - Tôi nghĩ rằng OP của yêu cầu cái gì đó hơi khác nhau ở đây. Thay vì muốn đặt hàng các thanh bằng tổng chiều cao của chúng, tôi nghĩ kukimbob đang hỏi cách đặt các khối màu * bên trong * mỗi thanh, đặt lớn nhất ở phía dưới, xuống theo trục x và nhỏ nhất ở trên cùng. (ví dụ: thứ tự của các màu trong mỗi thanh có thể khác nhau giữa các thanh). –

+0

@ JoshO'Brien Đúng vậy! Thứ tự trên trục x là tốt: từ độ dài nhỏ nhất đến dài nhất. Tôi chỉ muốn có thể điều khiển thứ tự các ngăn xếp màu trong mỗi thanh. – MattLBeck

+0

Ah, đó chắc chắn là một câu hỏi khác. Xin lỗi. –

Trả lời

10

Thứ tự các thanh được vẽ (từ trên xuống dưới) trong một thanh xếp chồng lên nhau trong ggplot2 dựa trên thứ tự của hệ số xác định các nhóm. Vì vậy, các yếu tố Sequence phải được sắp xếp lại dựa trên Abundance. Nhưng để có được thứ tự xếp đúng, thứ tự phải được đảo ngược.

ab.tab$Sequence <- reorder(ab.tab$Sequence, ab.tab$Abundance) 
ab.tab$Sequence <- factor(ab.tab$Sequence, levels=rev(levels(ab.tab$Sequence))) 

Sử dụng mã của bạn bây giờ mang đến cho cốt truyện mà bạn yêu cầu

ggplot(ab.tab, aes(x=Length, y=Abundance, fill=Sequence)) + 
    geom_bar(stat='identity') + 
    opts(legend.position="none") 

enter image description here

tôi có thể giới thiệu, tuy nhiên, một cái gì đó hơi khác nhau. Vì bạn đang chặn tỷ lệ ánh xạ màu thành chuỗi và mô tả của bạn dường như chỉ ra rằng bạn không quan tâm đến chuỗi cụ thể nào (và sẽ có nhiều thứ), tại sao không bỏ phần đó ra? Chỉ vẽ đường viền của các thanh mà không có bất kỳ màu tô nào.

ggplot(ab.tab, aes(x=Length, y=Abundance, group=Sequence)) + 
    geom_bar(stat='identity', colour="black", fill=NA) 

enter image description here

+0

Điều này hoạt động hoàn hảo, cảm ơn bạn! Và đề xuất của bạn tốt hơn nhiều so với những gì tôi hiện có, vì việc có cùng màu cho những lần đọc khác nhau trong các lớp học kích thước đã gây nhầm lẫn cho việc giải thích. – MattLBeck

+0

Bạn sẽ đặt hàng trên cơ sở mỗi cột như thế nào? –

+0

@AlexT Tôi không tin rằng có thể đặt hàng các danh mục trong một thanh khác nhau cho các thanh khác nhau. –