2013-06-26 10 views
13

में सलाखों का ऑर्डर और रंग ggplot2 का उपयोग करके बनाई गई स्टैक्ड बार प्लॉट के साथ मुझे बहुत परेशानी की समस्या है। पहले पूछे गए कुछ समान प्रश्न हैं लेकिन उदाहरण कोड के माध्यम से जाने के बाद मैं यह नहीं समझ सकता कि मैं क्या गलत कर रहा हूं।ggplot2 barplot

मैं ग्राफ बनाना चाहता हूं ताकि बार को उनके Biogeographic.affinity के आधार पर निम्न क्रम में रखा गया हो: (ऊपर से नीचे = बासियन, व्यापक, टोर्रेसियन और आइरियन)। सलाखों के रंग होना चाहिए: (बासियन = ड्रैकग्रे, वाइडस्पेड = लाइटग्रे, टोरेसियन = व्हाइट, और आइरियन = काला)।

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 

यह (इस समस्या को दूर करने के लिए अपने असफल प्रयासों के कुछ सहित) कोड मैं अब तक लिखा है है:

यह वही डाटासेट लग रहा है की तरह है।

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()) 

यह मूल ग्राफ देता है लेकिन रंग और आदेश अभी भी गलत हैं। आदेश मैंने कोशिश की सही करने के लिए, लेकिन वह कुछ भी नहीं बदला (कुंठित) !:

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

रंग बदलने मैंने कोशिश की और काम करने के लिए लगता है है के रूप में लेकिन यह सब दिखता आदेश की तरह अभी भी गलत है!

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()) 

कृपया मदद करें।

उत्तर

14

ggplot2 में एक स्टैक्ड बारप्लॉट में सलाखों को खींचा गया है (नीचे से ऊपर) ऑर्डर समूह को परिभाषित करने वाले कारक के क्रम पर आधारित है। तो Biogeographic.affinity कारक फिर से किया जाना चाहिए। आम तौर पर हम reorder का उपयोग करते हैं (यदि हम लगातार स्तर के अनुसार कारक को ऑर्डर करना चाहते हैं) लेकिन यहां मैं केवल एक नया आदेश दिया गया कारक बनाउंगा जो आपने करने की कोशिश की थी।

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

अब अगर आप Biog.aff.ord आपको अपेक्षित परिणाम मिल के रूप में aes_group_order परिभाषित करके अपने barplot मूल कारक से Biog.aff.ord का इस्तेमाल करके उनकी और अधिभावी डिफ़ॉल्ट समूहीकरण आदेश को भरने:

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? क्यूं कर? – agstudy

+9

ggplot2 के वर्तमान संस्करण में, ऑर्डर करने वाले कारक स्तर अब 'stat =" पहचान "' और 'position =" stack "' या 'position =" fill "के साथ बार प्लॉट के विशिष्ट मामले में काम नहीं करते हैं। (साथ ही, मेरा मानना ​​है कि 'ऑर्डर' सौंदर्य दूर चला गया है।) इसके बजाय, अब आपको वास्तव में डेटा फ्रेम को "सही" क्रम में सॉर्ट करना होगा। [यहां] देखें (https://github.com/hadley/ggplot2/issues/1593)। – joran