ggplot2に散布図(pairs()と同等)の行列を作成します。


117

追加の因子を色、形状などにマッピングし、より滑らかにするなどのの優れた機能ggplot2を使用して、で散布図の行列をプロットすることは可能ggplotですか?

そのbase機能に似たものを考えていますpairs


17
また、gallyもチェックしてください
ハドリー

1
ああ、ハドリーであなたのコメントを見なかった。私はあなたの信用を盗まないように私の答えをCWにした:)
naught101

回答:


37

plotmatrixを試してみてください:

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

私にとっては、mpg(mtcarsの最初の列)は重要ではありません。確認はしていませんが、確認する必要はありません。ただし、散布図が表示されます。


注:今後の参考のために、@ naught101がこの質問に対する別の応答で示唆plotmatrix()ているように、ggpairs()関数はGGallyパッケージの関数に置き換えられました。


私はこの問題に取り組むためにファセットを作ることができませんでした、それは式の右側の要素を必要とするようです。
Karsten W.

1
誰もが色を追加する方法を知っていますか?このgist.github.com/1405150を機能させることができないようです
EtienneLow-Décarie2012

1
この回答の最初の部分は間違っており、混乱の原因となります。ファセットを使用してペアプロットを行うことはできません。yxプロットのみを実行し、因子によってグループ化することができます。つまり、ファセットを使用すると、各サブプロットのxとyが同じになります。ペアでは、各列に異なるxがあり、各行に異なるyがあります。
naught101 2012

28
将来の参考のために、この質問に対する別の回答で@ naught101が示唆しplotmatrix()ているように、ggpairs()関数はGGallyパッケージの関数に置き換えられました。
smillig 2013年

1
@MattBannertがあなたの投稿にコメントを追加して、より見やすくしました。コメントの読みをスキップした場合、反対投票者を理解できました。よろしくお願いします。
zx8754 2016

232

私はこれをやり続けたいのですが、plotmatrixはがらくたです。ハドレーは推奨しています使用してGGallyパッケージを代わりに。これには、大幅に改善されたペアプロットである関数ggpairsがあります(データフレームで非連続変数を使用できます)。変数のタイプに応じて、各正方形に異なるプロットをプロットします。

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

ここに画像の説明を入力してください


26
これは本当に素晴らしいです。colour変数は要素でなければならないことに注意してください。それを理解するために45分を費やしました。
gregmacfarlane 2013年

1
これらの相関行列をペアなしでプロットする方法はありますか?たとえば、最初の列と他のすべての列をプロットする必要があります。ggpairsは非常に可能なペアを提供します。たとえば、10個の列があり、10 * 10 = 100となります。 1列目と他の9列のみの
比較

1
@Rgeek:melt関心のある変数をid変数として使用してデータフレームを作成し、他の変数でファセットすることができます。
naught101

6
ggpairsは使用せず、通常のようにggplot2を使用してくださいggplot(data, aes(x=id, y=value)) + geom_point() + facet_grid(.~variable)。私があなたが「相関プロット」と言うとき、私はあなたが散布図について話していると思います。
naught101

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

17

(の場合とは異なり)ggplotオブジェクトを取得したいggmatrix場合のggpairs()解決策は、データを2回溶融してから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')
}

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.