Можно ли построить матрицу диаграмм рассеяния ggplot2
, используя такие ggplot
приятные функции, как сопоставление дополнительных факторов с цветом, формой и т. Д. И добавление более гладких?
Я думаю о чем-то похожем на base
функцию pairs
.
Можно ли построить матрицу диаграмм рассеяния ggplot2
, используя такие ggplot
приятные функции, как сопоставление дополнительных факторов с цветом, формой и т. Д. И добавление более гладких?
Я думаю о чем-то похожем на base
функцию pairs
.
Ответы:
Вы можете попробовать plotmatrix:
library(ggplot2)
data(mtcars)
plotmatrix(mtcars[,1:3])
для меня миль на галлон (первый столбец в mtcars) не должно быть фактором. Я не проверял, но нет причин, почему это должно быть. Однако я получаю диаграмму рассеяния :)
Примечание. Для справки в будущем эта plotmatrix()
функция была заменена ggpairs()
функцией из GGally
пакета, как предлагает @ naught101 в другом ответе на этот вопрос ниже.
plotmatrix()
функция была заменена ggpairs()
функцией из GGally
пакета, как предлагает @ naught101 в другом ответе на этот вопрос.
Я все время хочу это делать, но сюжетная матрица - дерьмо. Хэдли рекомендует вместо этого использовать пакет GGally . В нем есть функция ggpairs, которая представляет собой значительно улучшенный график пар (позволяет использовать прерывистые переменные в ваших фреймах данных). Он строит разные графики в каждом квадрате, в зависимости от типов переменных:
library(GGally)
ggpairs(iris, aes(colour = Species, alpha = 0.4))
colour
переменная должна быть фактором; потратил 45 минут на выяснение этого.
melt
использовать фрейм данных, используя интересующую вас переменную в качестве переменной id, а затем фасетировать другие переменные.
ggplot(data, aes(x=id, y=value)) + geom_point() + facet_grid(.~variable)
. Я предполагаю, что вы говорите о диаграммах рассеяния, когда говорите «график корреляции», потому что я никогда не слышал об этом иначе.
GGally::ggpairs(iris, aes(colour = Species, alpha=0.4))
Если кто-то хочет получить 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')
}