[r] ggplot2에서 산점도 행렬 (pairs () 등가물) 만들기

ggplot2사용하여 산점도 행렬을 그릴 수 있습니까?ggplot추가 요소를 색상, 모양 등에 매핑하고 더 매끄럽게 추가하는 것과 같은의 멋진 기능을 있습니까?

base함수 와 비슷한 것을 생각하고 있습니다 pairs.



답변

plotmatrix를 사용해 볼 수 있습니다.

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

나에게 mpg (mtcars의 첫 번째 열)는 요소가되어서는 안됩니다. 나는 그것을 확인하지 않았지만 그것이 하나 여야 할 이유가 없습니다. 그러나 나는 산점도를 얻습니다 🙂


참고 : 향후 참조를 위해 @ naught101 이이 질문에 대한 다른 응답에서 제안한대로이 함수는 패키지 plotmatrix()ggpairs()함수 로 대체되었습니다 .GGally


답변

나는 이것을 계속하고 싶지만, plotmatrix는 쓰레기입니다. Hadley 대신 GGally 패키지 를 사용할 것을 권장 합니다. 여기에는 크게 개선 된 쌍 플롯 인 ggpairs 라는 함수 가 있습니다 (데이터 프레임에서 비 연속 변수를 사용할 수 있음). 변수 유형에 따라 각 사각형에 다른 플롯을 표시합니다.

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

여기에 이미지 설명 입력


답변

ggplot객체 를 얻으려면 (의 ggmatrix경우가 ggpairs()아님) 데이터를 두 번 ggplot녹인 다음 패싯 을 사용하는 것이 해결책입니다. 매개 변수가 제공 되면 플롯 된 영역을 제한하는 facet_wrap것보다 낫습니다 .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')
}

여기에 이미지 설명 입력


답변