Создайте матрицу диаграмм рассеяния (эквивалентных пар ()) в ggplot2 - PullRequest
102 голосов
/ 17 сентября 2010

Можно ли построить матрицу точечных диаграмм с помощью ggplot2, используя замечательные функции ggplot, такие как сопоставление дополнительных факторов для цвета, формы и т. Д. И добавление более плавного?что-то похожее на функцию base pairs.

Ответы [ 3 ]

208 голосов
/ 21 августа 2012

Я все время хочу это сделать, но plotmatrix - это дерьмо. Хэдли рекомендует , используя взамен пакет GGally . Он имеет функцию ggpairs , которая представляет собой значительно улучшенный график пар (позволяет использовать непостоянные переменные в ваших фреймах данных). Он строит разные графики в каждом квадрате в зависимости от типов переменных:

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

enter image description here

29 голосов
/ 17 сентября 2010

Возможно, вы захотите попробовать plotmatrix:

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

для меня mpg (первый столбец в mtcars) не должен быть фактором.Я не проверял это, но нет никаких причин, почему он должен быть один.Однако я получаю точечный график:)


Примечание: Для дальнейшего использования функция plotmatrix() была заменена на функцию ggpairs() из пакета GGally в виде@ naught101 предлагает в другом ответе ниже на этот вопрос.

11 голосов
/ 09 декабря 2017

Если кто-то хочет получить объект ggplot (не ggmatrix, как в случае ggpairs()), решение состоит в том, чтобы дважды переплавить данные, а затем 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')
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...