Tworzenie macierzy scatterplots (pairs () equivalent) w ggplot2

Czy jest możliwe wykreślić macierz Wykresów punktowych z ggplot2, używając ggplot's ładne funkcje, takie jak odwzorowanie dodatkowych czynników do koloru, kształtu itp. i dodać gładsze?

Myślę o czymś podobnym do funkcji base pairs.

 90
Author: Henrik, 2010-09-17

3 answers

Możesz spróbować plotmatrix:

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

Dla mnie mpg (Pierwsza kolumna w mtcars) nie powinno być czynnikiem. Nie sprawdzałem, ale nie ma powodu, żeby to był jeden. Ja jednak dostaję działkę scatter:)


Uwaga: w przyszłości funkcja plotmatrix() została zastąpiona przez ggpairs() z pakietu GGally, Jak sugeruje @naught101 w innej Odpowiedzi poniżej na to pytanie.

 23
Author: Matt Bannert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:27

Ciągle chcę to zrobić, ale plotmatrix to gówno. Hadley zaleca Użycie zamiast pakietu GGally . Posiada funkcję ggpairs , która jest znacznie ulepszonym wykresem par (pozwala używać zmiennych nieciągłych w ramkach danych). W zależności od typu zmiennej wykresy są różne w każdym kwadracie:

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

Tutaj wpisz opis obrazka

 192
Author: naught101,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-23 06:20:12

Jeśli ktoś chce uzyskać obiekt ggplot (nie ggmatrix jak w przypadku ggpairs()), rozwiązaniem jest stopienie danych dwa razy, a następnie ggplot z fasetowaniem. facet_wrap byłoby lepsze niż facet_grid w ograniczaniu obszaru wykreślonego, biorąc pod uwagę, że podany jest parametr 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')
}

Tutaj wpisz opis obrazka

 7
Author: mjktfw,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-12 22:11:43