Чи можна побудувати матрицю розкиданих ділянок за ggplot2
допомогою ggplot
приємних функцій, таких як відображення додаткових факторів на колір, форму тощо та додавання більш плавного?
Я думаю про щось подібне до base
функції pairs
.
Чи можна побудувати матрицю розкиданих ділянок за ggplot2
допомогою ggplot
приємних функцій, таких як відображення додаткових факторів на колір, форму тощо та додавання більш плавного?
Я думаю про щось подібне до base
функції pairs
.
Відповіді:
Ви можете спробувати plotmatrix:
library(ggplot2)
data(mtcars)
plotmatrix(mtcars[,1:3])
для мене mpg (перша колонка в mtcars) не повинна бути фактором. Я не перевірив це, але немає причини, чому він повинен бути таким. Однак я отримую розкид сюжету :)
Примітка. Для подальшого ознайомлення plotmatrix()
функцію було замінено ggpairs()
функцією з GGally
пакету, як підказує @ naught101 в іншій відповіді нижче на це питання.
plotmatrix()
функція була замінена ggpairs()
функцією з GGally
пакета, як пропонує @ naught101 в іншій відповіді на це запитання.
Я постійно хочу це робити, але plotmatrix - це лайно. Хедлі рекомендує замість цього використовувати пакет 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')
}