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
.
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.
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))
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')
}
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