2010-09-17 25 views
81

में scatterplots (जोड़े() समकक्ष) के एक मैट्रिक्स यह ggplot2 साथ बिखराव भूखंडों के एक मैट्रिक्स प्लॉट करने के लिए संभव है बनाएँ, रंग करने के लिए मानचित्रण अतिरिक्त कारकों की तरह ggplot की अच्छी सुविधाओं का उपयोग कर, आकार आदि और चिकनी जोड़ने?ggplot2

मैं base फ़ंक्शन pairs के समान कुछ के बारे में सोच रहा हूं। एक कारक नहीं होना चाहिए

library(ggplot2) 
    data(mtcars) 
    plotmatrix(mtcars[,1:3]) 

मेरे लिए mpg (mtcars में पहले स्तंभ):

+15

इसके अलावा ggally – hadley

+1

आह की जाँच, मैं अपनी टिप्पणी वहाँ हैडली नहीं देखा। मैंने अपना जवाब सीडब्ल्यू बनाया ताकि आपके क्रेडिट को चोरी न किया जा सके :) – naught101

उत्तर

22

आप plotmatrix की कोशिश करना चाहते हो सकता है। मैंने इसे चेक नहीं किया है, लेकिन ऐसा कोई कारण नहीं है कि यह एक होना चाहिए। हालांकि मैं एक बिखराव साजिश :)


नोट मिलता है: भविष्य में संदर्भ के लिए, plotmatrix() समारोह @ naught101 इस सवाल का in another response below पता चलता है के रूप में GGally पैकेज से ggpairs() समारोह ने ले लिया है।

+0

मुझे इस समस्या पर काम करने के लिए पहलू नहीं मिल सका, ऐसा लगता है कि सूत्र के दाईं ओर कारकों की आवश्यकता है .. या क्या आप मुझे एक न्यूनतम उदाहरण दे सकते हैं? –

+1

कोई भी जानता है कि रंग कैसे जोड़ना है? मुझे यह https://gist.github.com/1405150 काम करने में सक्षम नहीं लगता है –

+0

इस उत्तर का पहला भाग गलत है, और भ्रम का कारण बनता है। आप जोड़ों के साथ जोड़ों के प्लॉट नहीं कर सकते हैं: आप केवल एक्स प्लॉट्स द्वारा वाई कर सकते हैं, और उन्हें कारकों से समूहित कर सकते हैं। दूसरे शब्दों में, प्रत्येक उप-साजिश पर आपके पास समान x और y समानता के साथ; जोड़े के साथ, आपके पास प्रत्येक कॉलम पर एक अलग एक्स है, और प्रत्येक पंक्ति पर एक अलग वाई है। – naught101

171

मैं यह करना चाहता हूं, लेकिन प्लॉटमैट्रिक्स बकवास है। इसके बजाय GGally package का उपयोग करके हैडली recommends। इसमें एक फ़ंक्शन है, ggpairs जो कि एक बहुत ही बेहतर जोड़े प्लॉट है (आपको अपने डेटा फ्रेम में गैर-निरंतर चर का उपयोग करने देता है)। यह प्रत्येक वर्ग में अलग अलग भूखंडों भूखंडों, चर प्रकार पर निर्भर करता है:

library(GGally) 
ggpairs(iris, aes(colour = Species, alpha = 0.4)) 

enter image description here

+22

यह वास्तव में महान है। यह ध्यान देने योग्य है कि किसी भी 'रंग' चर को एक कारक होना चाहिए; एक मिनट को समझने में 45 मिनट बिताए। – gregmacfarlane

+0

+1। वैसे, क्या आप जानते हैं कि भूखंडों को कैसे समायोजित करें ताकि लेबल पूरी तरह से दिखाए जा सकें और ओवरलैपिंग न करें? –

+1

क्या जोड़ों के बिना इन सहसंबंध मैट्रिक्स को साजिश करने का कोई तरीका है?उदाहरण के लिए मुझे हर दूसरे कॉलम बनाम पहले कॉलम को प्लॉट करने की ज़रूरत है। मैग्नेयर बहुत ही संभावित जोड़ी देता है। उदाहरण के लिए मेरे पास 10 कॉलम हैं और यह मुझे 10 * 10 = 100 देता है। लेकिन मुझे पहले कॉलम बनाम 9 अन्य – Rgeek

4

एक एक ggplot वस्तु (ggpairs() के मामले में के रूप में नहीं ggmatrix) प्राप्त करने के लिए चाहता है, समाधान पिघल है डेटा दो बार, फिर ggplot फ़ेसटिंग के साथ। facet_wrap प्लॉट किए गए क्षेत्र को सीमित करने में facet_grid से बेहतर होगा, scales = 'free' पैरामीटर प्रदान किए जाने पर दिया गया है।

require(ggplot2) 
require(dplyr) 
require(tidyr) 

gatherpairs <- function(data, ..., 
         xkey = '.xkey', xvalue = '.xvalue', 
         ykey = '.ykey', yvalue = '.yvalue', 
         na.rm = FALSE, convert = FALSE, factor_key = FALSE) { 
    vars <- quos(...) 
    xkey <- enquo(xkey) 
    xvalue <- enquo(xvalue) 
    ykey <- enquo(ykey) 
    yvalue <- enquo(yvalue) 

    data %>% { 
    cbind(gather(., key = !!xkey, value = !!xvalue, !!!vars, 
       na.rm = na.rm, convert = convert, factor_key = factor_key), 
      select(., !!!vars)) 
    } %>% gather(., key = !!ykey, value = !!yvalue, !!!vars, 
       na.rm = na.rm, convert = convert, factor_key = factor_key) 
} 

iris %>% 
    gatherpairs(Sepal.Length, Sepal.Width, Petal.Length, Petal.Width) %>% { 
    ggplot(., aes(x = .xvalue, y = .yvalue, color = Species)) + 
     geom_point() + 
     geom_smooth(method = 'lm') + 
     facet_wrap(.xkey ~ .ykey, ncol = length(unique(.$.ykey)), scales = 'free', labeller = label_both) + 
     scale_color_brewer(type = 'qual') 
} 

enter image description here