web-dev-qa-db-ja.com

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

ggplotの優れた機能を使用して、追加の要因を色、形状などにマッピングし、よりスムーズに追加するなど、ggplot2を使用して散布図のマトリックスをプロットすることは可能ですか?

base関数pairsに似たものを考えています。

102
Karsten W.

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

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

私にとっては、mpg(mtcarsの最初の列)は要因ではありません。私はそれをチェックしていませんが、それが1つであるべき理由はありません。ただし、散布図が表示されます:)


注:将来の参照のために、plotmatrix()関数は@としてGGallyパッケージのggpairs()関数に置き換えられました。 naught101は、この質問に対して 以下の別の回答 を提案しています。

29
Matt Bannert

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

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

enter image description here

210
naught101

ggplotオブジェクト(ggpairs()の場合のようにggmatrixではない)を取得したい場合、解決策はデータを2回溶かしてからggplotファセット付き。 facet_wrapfacet_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

12
mjktfw