Ggplot2'de dağılım grafiğinden (çiftler () eşdeğeri) oluşan bir matris oluşturun


117

Renk, şekil vb. İçin ek faktörleri haritalamak ve daha pürüzsüz eklemek gibi güzel özelliklerini ggplot2kullanarak bir dağılım grafikleri matrisi çizmek mümkün müdür ggplot?

Ben benzer bir şey hakkında düşünüyorum basefonksiyonu pairs.


17
Ayrıca ggally
hadley'e

1
Ah, orada yorumunu görmedim Hadley.
Kredinizi çalmamak

Yanıtlar:


37

Plotmatrix'i denemek isteyebilirsiniz:

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

bana göre mpg (mtcars'taki ilk sütun) bir faktör olmamalı. Kontrol etmedim ama olması için hiçbir sebep yok. Ancak bir dağılım grafiği alıyorum :)


Not: İleride başvurmak üzere, @ naught101'in bu soruya aşağıdaki başka bir yanıtta önerdiği gibi plotmatrix(), ggpairs()işlev GGallypaketin işleviyle değiştirilmiştir .


Bu problem üzerinde çalışmak için yüzleşemedim, formülün sağ tarafında faktörlere ihtiyaç var gibi görünüyor .. Veya bana minimal bir örnek verebilir misiniz?
Karsten W.

1
Nasıl renk ekleneceğini bilen var mı? Bunu elde edebilmek için görünmüyor gist.github.com/1405150 çalışmalarına
Etienne Düşük Decarie

1
Bu cevabın ilk kısmı yanlıştır ve kafa karışıklığına neden olur. Faceting ile çift grafikleri yapamazsınız: y'yi yalnızca x grafiklere göre yapabilir ve faktörlere göre gruplayabilirsiniz. Diğer bir deyişle, fasetleme ile her alt grafikte aynı x ve y'ye sahip olursunuz; çiftler varsa, her sütunda farklı bir x ve her satırda farklı bir y olur.
naught101

28
Gelecekte referans olması için, @ naught101'in bu soruya başka bir yanıtta önerdiği gibi plotmatrix(), ggpairs()işlev GGallypaketin işleviyle değiştirildi .
smillig

1
@MattBannert, daha görünür hale getirmek için yayınınıza yorumu ekledi, yorumları okumayı atlamış olsaydım, olumsuz oy verenleri anlayabilirdim. Umarım aldırmazsın.
zx8754

232

Bunu yapmayı istemeye devam ediyorum ama olay örgüsü saçmalık. Hadley , bunun yerine GGally paketini kullanmanızı önerir . Büyük ölçüde geliştirilmiş bir çift çizimi olan bir işlevi vardır, ggpairs (veri çerçevelerinizde sürekli olmayan değişkenleri kullanmanıza izin verir). Değişken türlere bağlı olarak her karede farklı grafikler çizer:

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

görüntü açıklamasını buraya girin


26
Bu gerçekten harika. Herhangi bir colourdeğişkenin bir faktör olması gerektiğine dikkat etmek önemlidir; Bunu anlamak için 45 dakika harcadı.
gregmacfarlane

1
Bu korelasyon matrislerini çiftler olmadan çizmenin bir yolu var mı? Örneğin ilk sütunu diğer sütunlara göre çizmem gerekiyor. Gpairs çok olası bir çift veriyor, örneğin 10 sütunum var ve bana 10 * 10 = 100 veriyor ama ben 1. sütun vs sadece diğer 9
Rgeek

1
@Rgeek: meltilgilendiğiniz değişkeni bir id değişkeni olarak kullanarak veri çerçevesini ve ardından diğer değişkenler tarafından faset yapabilirsiniz.
naught101

6
Ggpairs kullanmayın, ggplot2'yi normal olarak kullanın, gibi ggplot(data, aes(x=id, y=value)) + geom_point() + facet_grid(.~variable). "Korelasyon grafiği" dediğinizde dağılım grafiklerinden bahsettiğinizi varsayıyorum, çünkü bunu başka türlü hiç duymadım.
naught101

3
@JimGreen GGally::ggpairs(iris, aes(colour = Species, alpha=0.4))
ElBaulP

17

Bir ggplotnesne elde etmek istiyorsa ( ggmatrixdurumdaki gibi değil ggpairs()), çözüm veriyi iki kez eritmektir, sonra ggplotfasetleme ile. parametre verildiğinde, çizilen alanı sınırlamaktan facet_wrapdaha iyi olacaktır .facet_gridscales = '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')
}

görüntü açıklamasını buraya girin

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.