2013-06-26 19 views
13

Tôi có một vấn đề rất khó chịu với một âm mưu thanh xếp chồng lên nhau được tạo bằng cách sử dụng ggplot2. Có một số câu hỏi tương tự được hỏi trước đó nhưng sau khi xem qua mã ví dụ, tôi không thể hiểu được tôi đang làm gì sai.Đặt hàng và màu sắc của các thanh trong ggplot2 barplot

Tôi muốn tạo biểu đồ sao cho các thanh được xếp chồng theo thứ tự sau dựa trên Biogeographic.affinity của chúng: (Từ trên xuống dưới = Bassian, Widespread, Torresian và Eyrean). Màu sắc cho các thanh nên là: (Bassian = drakgrey, Rộng hơn = lightgrey, Torresian = trắng, và Eyrean = màu đen).

Đây là những gì các tập dữ liệu trông giống như:

biogeo 
     Site Biogeographic.affinity Rank Number.of.species Total.Species Percent 
    1  A    Bassian 1     1   121 0.8264463 
    2  A     Eyrean 4    39   121 32.2314050 
    3  A    Torresian 3    62   121 51.2396694 
    4  A    Widespread 2    19   121 15.7024793 
    5 DD    Bassian 1     1   128 0.7812500 
    6 DD     Eyrean 4    46   128 35.9375000 
    7 DD    Torresian 3    63   128 49.2187500 
    8 DD    Widespread 2    18   128 14.0625000 
    9 E_W    Bassian 1     1   136 0.7352941 
    10 E_W     Eyrean 4    54   136 39.7058824 
    11 E_W    Torresian 3    65   136 47.7941176 
    12 E_W    Widespread 2    16   136 11.7647059 
    13 KS    Bassian 1     2   145 1.3793103 
    14 KS     Eyrean 4    63   145 43.4482759 
    15 KS    Torresian 3    62   145 42.7586207 
    16 KS    Widespread 2    18   145 12.4137931 
    17 Z_Ka    Bassian 1     1   110 0.9090909 
    18 Z_Ka     Eyrean 4    64   110 58.1818182 
    19 Z_Ka    Torresian 3    31   110 28.1818182 
    20 Z_Ka    Widespread 2    14   110 12.7272727 

Đây là mã tôi đã viết cho đến nay (trong đó có một số nỗ lực không thành của tôi để khắc phục sự cố).

ggplot(data=biogeo, aes(x=Site, y=Percent, fill=Biogeographic.affinity)) + geom_bar(stat="identity", colour="black")+ 
    scale_fill_grey() + ylab("Percent") + xlab("Location") +  
    theme_bw()+ theme(panel.grid.minor = element_blank()) 

Điều này mang lại đồ thị cơ bản nhưng màu sắc và trật tự vẫn sai. Để khắc phục trật tự tôi đã cố gắng, nhưng điều đó không thay đổi bất cứ điều gì (thất vọng) !:

newone <- transform(biogeo, Biogeographic.affinity = factor(Biogeographic.affinity), Rank = factor(Rank, levels = 1:4)) 

Đối với màu sắc thay đổi Tôi đã thử và dường như để làm việc nhưng tất cả trông giống như thứ tự vẫn chạy sai!

cols<- c("Bassian"="darkgrey","Widespread"="lightgrey", "Torresian"="white", "Eyrean"="black") #designates the colors of the bars 
ggplot(data=newone, aes(x=Site, y=Percent, fill=Biogeographic.affinity)) + geom_bar(stat="identity", colour="black")+ 
    scale_fill_manual(values = cols) + ylab("Percent") + xlab("Location") +  
    theme_bw()+ theme(panel.grid.minor = element_blank()) 

vui lòng trợ giúp.

Trả lời

14

Thứ tự các thanh được vẽ (từ trên xuống dưới) trong một ô xếp chồng 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ố Biogeographic.affinity phải được sắp xếp lại. Nói chung chúng tôi sử dụng reorder (nếu chúng tôi muốn đặt hàng các yếu tố theo một mức độ liên tục) nhưng ở đây tôi sẽ chỉ tạo ra một yếu tố đặt hàng mới tương tự như những gì bạn đã cố gắng để làm.

biogeo <- transform(biogeo, 
       Biog.aff.ord = factor(
        Biogeographic.affinity , 
        levels=c('Bassian','Widespread','Torresian', 'Eyrean'), 
        ordered =TRUE)) 

Bây giờ nếu bạn điền barplot bạn sử dụng Biog.aff.ord chứ không phải là yếu tố ban đầu và trọng thứ tự nhóm mặc định bằng cách định nghĩa aes_group_order như Biog.aff.ord để bạn nhận được kết quả mong đợi:

cols <- c(Bassian="darkgrey",Widespread="lightgrey", 
      Torresian="white", Eyrean="black") 
ggplot(data=biogeo, aes(x=Site, y=Percent, 
     order=Biog.aff.ord)) + ##!! aes_group_order 
    geom_bar(stat="identity", colour="black", 
     aes(fill=Biog.aff.ord)) + 
    scale_fill_manual(values = cols) 

enter image description here

+0

@IDelToro thứ tự các cấp? Tại sao? – agstudy

+9

Trong phiên bản hiện tại của ggplot2, các mức hệ số thứ tự không còn hoạt động trong trường hợp cụ thể của các ô bar với 'stat =" identity "' và 'position =" stack "' hoặc 'position =" fill "'. (Ngoài ra, tôi tin rằng thẩm mỹ 'trật tự 'đã biến mất.) Thay vào đó, bây giờ bạn phải thực sự sắp xếp chính khung dữ liệu thành thứ tự" đúng ". Xem [tại đây] (https://github.com/hadley/ggplot2/issues/1593). – joran

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