Ggplot2 में स्कैटरप्लॉट (जोड़े () समकक्ष) का एक मैट्रिक्स बनाएं


117

क्या स्कैटर प्लॉट्स के मैट्रिक्स को प्लॉट करना संभव है ggplot2, जिसमें ggplotरंग, आकार आदि के अतिरिक्त कारकों की मैपिंग और स्मूथी को जोड़ने जैसी अच्छी विशेषताओं का उपयोग किया जा सकता है?

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


17
इसके अलावा ggally
Hadley

1
आह, मैंने आपकी टिप्पणी नहीं देखी थी। मैंने अपना उत्तर CW बनाया है ताकि आपका क्रेडिट चोरी न हो :)
naught101

जवाबों:


37

आप प्लॉटमेट्रिक्स आज़माना चाह सकते हैं:

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

मेरे लिए mpg (mtcars में पहला कॉलम) एक कारक नहीं होना चाहिए। मैंने इसकी जाँच नहीं की है, लेकिन इसका कोई कारण नहीं है कि यह एक होना चाहिए। हालाँकि मुझे एक बिखराव की साजिश मिली :)


नोट: भविष्य के संदर्भ के लिए, plotmatrix()फ़ंक्शन को पैकेज ggpairs()से फ़ंक्शन द्वारा बदल दिया गया है GGallyक्योंकि @ n-0101 इस प्रश्न के नीचे एक और प्रतिक्रिया में सुझाव देता है


मुझे इस समस्या पर काम करने की सुविधा नहीं मिली, ऐसा लगता है कि सूत्र के दाहिने हाथ के कारकों की आवश्यकता है .. या क्या आप मुझे एक न्यूनतम उदाहरण दे सकते हैं?
कर्स्टन डब्ल्यू।

1
किसी को पता है कि रंग कैसे जोड़ना है? मैं इस gist.github.com/1405150 को काम करने में सक्षम नहीं लगता
Etienne Low-Décarie

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

28
भविष्य के संदर्भ के लिए, plotmatrix()फ़ंक्शन को पैकेज ggpairs()से फ़ंक्शन द्वारा बदल दिया गया है GGallyक्योंकि @ n-0101 इस प्रश्न के उत्तर में सुझाव देता है।
स्माइलिग

1
@MattBannert ने इसे और अधिक दृश्यमान बनाने के लिए आपकी पोस्ट में टिप्पणी जोड़ी, मैं टिप्पणी करने वालों को समझ सकता था यदि टिप्पणियों को पढ़ना छोड़ दिया था। आशा है कि आप बुरा नहीं मानेंगे
zx8754

232

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

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

यहां छवि विवरण दर्ज करें


26
यह वास्तव में बहुत अच्छा है। यह ध्यान देने योग्य है कि किसी भी colourचर का एक कारक होना चाहिए; 45 मिनट लगा कि एक बाहर।
gregmacfarlane

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

1
@Rgeek: आप meltउस वैरिएबल का उपयोग करके डेटाफ्रेम कर सकते हैं , जिसे आप एक आईडी वैरिएबल के रूप में रुचि रखते हैं, और फिर दूसरे वैरिएबल्स के द्वारा पहलू।
n

6
Ggpairs का उपयोग न करें, बस ggplot2 का सामान्य रूप से उपयोग करें, जैसे ggplot(data, aes(x=id, y=value)) + geom_point() + facet_grid(.~variable)। मैं मान रहा हूं कि जब आप "सहसंबंध की साजिश" कहते हैं, तो आप तितर बितर भूखंडों के बारे में बात कर रहे हैं, क्योंकि मैंने इसके बारे में कभी नहीं सुना है।
n

3
@ जीमग्रीन GGally::ggpairs(iris, aes(colour = Species, alpha=0.4))
एलबौल

17

यदि कोई ggplotवस्तु प्राप्त करना चाहता है ( ggmatrixजैसा कि उसके मामले में नहीं है ggpairs()), समाधान डेटा को दो बार 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')
}

यहां छवि विवरण दर्ज करें

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.