2012-08-02 23 views
7

निम्नलिखित dataframe से कार्य करना:दो कारक बार साजिश

> foo 
     species density day percent 
    1 species1 high 1 0.40 
    2 species1  low 1 0.20 
    3 species1 medium 1 0.40 
    4 species2 high 1 0.35 
    5 species2  low 1 0.10 
    6 species2 medium 1 0.55 
    7 species3 high 1 0.35 
    8 species3  low 1 0.20 
    9 species3 medium 1 0.45 
    10 species4 high 1 0.30 
    11 species4  low 1 0.20 
    12 species4 medium 1 0.50 
    13 species1 high 100 0.50 
    14 species1  low 100 0.40 
    15 species1 medium 100 0.10 
    16 species2 high 100 0.40 
    17 species2  low 100 0.05 
    18 species2 medium 100 0.55 
    19 species3 high 100 0.65 
    20 species3  low 100 0.05 
    21 species3 medium 100 0.30 
    22 species4 high 100 0.40 
    23 species4  low 100 0.20 
    24 species4 medium 100 0.40 

मैं निम्नलिखित आयामी बार ग्राफ बनाया है:

require(ggplot2) 

foo$density<-factor(foo$density,levels=c('low','medium','high')) 

d <- ggplot(foo, aes(x=species, y=percent, fill=density)) + 
    geom_bar(aes(width=.65), stat="identity") + 
    facet_grid(. ~ day) 

enter image description here

हालांकि, मैं इन मर्ज करना चाहते हैं एक दो-कारक बार ग्राफ बनाने के लिए ग्राफ। एक्स-अक्ष पर, प्रत्येक दिन -1 और 100 - प्रजातियों द्वारा समूहीकृत किया जाएगा। इसे कैसे बनाया जाए इस पर कोई सुझाव?

बहुत धन्यवाद!

उत्तर

4

यह एक

foo$species_day <- with(data = foo, expr = paste(species, day)) 
d <-ggplot(foo, aes(x=species_day, y=percent, fill=density)) + 
     geom_bar(aes(width=.65), stat="identity") 

enter image description here प्रयास करें आप स्तरों पुनर्व्यवस्थित कर सकते हैं अगर आप चाहते हैं।

+0

या आप 'प्रजाति' को 'प्रजातियों' पर एक कारक और पहलू में परिवर्तित कर सकते हैं ... – joran

+1

@joran मुझे प्रजातियों द्वारा पहलू के विचार पसंद हैं, लेकिन फिर एक्स-अक्ष का लेबलिंग एक मुद्दा बन जाता है। मैं 'प्रजातियों' को फोकल एक्स-अक्ष लेबल (ग्राफ के निचले हिस्से में) और 'दिन' को प्रत्येक 'प्रजातियों' (नीचे भी) में सेट/सेट करना चाहता हूं। –

+0

@ MYaseen208 इस सुझाव के लिए धन्यवाद- मुझे यह पसंद है कि यह एक ही ग्राफ पर कैसा है। क्या प्रजातियों द्वारा बार 'समूह' के बीच अधिक से कम जगह बनाने के लिए वैसे भी है? –

1

यहां एक और दृष्टिकोण है जो आपकी आवश्यकताओं के साथ @ जोरन के सुझाव को शामिल करता है।

मैंने day को एक कारक में बदल दिया है, लेकिन डिफ़ॉल्ट एक्स-अक्ष लेबल को "प्रजाति" में भी बदल दिया है। इसके अलावा, क्योंकि density स्पष्ट रूप से अनुक्रमिक कारक है, मैंने कलर ब्रेवर (http://colorbrewer2.org/) से अनुक्रमिक रंग स्केल का उपयोग किया है। आप palette नंबर बदलकर या scale_fill_brewer(palette="GnBu") नाम से पैलेट को कॉल करके रंग स्केल के साथ प्रयोग कर सकते हैं। रंग ब्रेवर वेब पेज पर पैलेट नाम खोजें।

foo <- read.table(header=TRUE, 
       text="species density day percent 
        1 species1 high 1 0.40 
        2 species1  low 1 0.20 
        3 species1 medium 1 0.40 
        4 species2 high 1 0.35 
        5 species2  low 1 0.10 
        6 species2 medium 1 0.55 
        7 species3 high 1 0.35 
        8 species3  low 1 0.20 
        9 species3 medium 1 0.45 
        10 species4 high 1 0.30 
        11 species4  low 1 0.20 
        12 species4 medium 1 0.50 
        13 species1 high 100 0.50 
        14 species1  low 100 0.40 
        15 species1 medium 100 0.10 
        16 species2 high 100 0.40 
        17 species2  low 100 0.05 
        18 species2 medium 100 0.55 
        19 species3 high 100 0.65 
        20 species3  low 100 0.05 
        21 species3 medium 100 0.30 
        22 species4 high 100 0.40 
        23 species4  low 100 0.20 
        24 species4 medium 100 0.40") 

foo$density <- factor(foo$density, levels=c("low", "medium", "high")) 
foo$day <- factor(paste("Day", foo$day, sep="_")) 

library(ggplot2) 

d2 <- ggplot(foo, aes(x=day, y=percent, fill=density)) + 
     theme_bw() + 
     geom_bar(width=0.95, stat="identity") + 
     scale_fill_brewer(type="seq", palette=15) + 
     xlab("Species") + 
     opts(axis.text.x=theme_text(size=6)) + 
     facet_grid(. ~ species) 

ggsave("barplot_1.png", d2, width=6, height=4) 

enter image description here

एक समस्या यह है कि मैं हल नहीं किया है कि density के स्तर को उचित क्रम में ढेर नहीं है (मेरे लिए या @ MYaseen208 के जवाब में) है। मूल पोस्ट में स्टैकिंग सही है। क्या कोई जानता है कि परेशानी क्या है?

+0

अच्छे सुझाव। मैं ग्राफ के निचले हिस्से में 'प्रजातियों' नामों को भी उम्मीद कर रहा था ('दिन' और एक्स-अक्ष लेबल के बीच)। मैं एक दिन एक्स-अक्ष साझा करने के लिए 'दिन' चाहता हूं और प्रत्येक प्रजाति का निर्धारण करने वाली रेखाएं नहीं हैं (इसलिए यह एक एकल ग्राफ प्रतीत होता है)। मैं अंतिम उत्पाद के लिए रंग ब्रेवर और अन्य फैंसी चाल का उपयोग करूँगा, लेकिन सादगी के लिए मैंने उन विवरणों को छोड़ दिया। स्टैकिंग मुद्दे के लिए- यह सुनिश्चित न करें कि यह क्या हो सकता है, लेकिन यदि आप डेटा को .csv के रूप में सहेजते हैं और इसे आयात करते हैं तो यह सही ढंग से ढेर होता है। –

+0

मुझे मदद करने में सक्षम होने में खुशी हो रही है (थोड़ा, मुझे उम्मीद है।) मुझे यकीन नहीं है कि "दिन" के लिए एक एक्स-अक्ष साझा करने के लिए इसका क्या अर्थ होगा। एक्स-अक्ष के साथ प्रजातियों के लेबल रखने के लिए - अनुकूलन को पूरा करने के लिए एडोब इलस्ट्रेटर (या इंकस्केप) में पीडीएफ संस्करण लाने के लिए यह अधिक उपयुक्त हो सकता है। (मुझे यकीन है कि ggplot2 या ग्रिड कोड के साथ आप जो चाहते हैं उसे करने के लिए हैक हैं, लेकिन कम रिटर्न का एक बिंदु है)। – bdemarest

संबंधित मुद्दे