Czy możliwe jest wykreślenie macierzy wykresów punktowych przy ggplot2
użyciu ggplot
fajnych funkcji, takich jak mapowanie dodatkowych czynników na kolor, kształt itp. Oraz dodawanie gładkości?
Myślę o czymś podobnym do base
funkcji pairs
.
Czy możliwe jest wykreślenie macierzy wykresów punktowych przy ggplot2
użyciu ggplot
fajnych funkcji, takich jak mapowanie dodatkowych czynników na kolor, kształt itp. Oraz dodawanie gładkości?
Myślę o czymś podobnym do base
funkcji pairs
.
Odpowiedzi:
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 tego, ale nie ma powodu, dla którego miałby to być. Jednak dostaję wykres punktowy :)
Uwaga: na przyszłość, plotmatrix()
funkcja została zastąpiona ggpairs()
funkcją z GGally
pakietu, jak sugeruje @ naught101 w innej odpowiedzi poniżej na to pytanie.
plotmatrix()
funkcja została zastąpiona ggpairs()
funkcją z GGally
pakietu, jak sugeruje @ naught101 w innej odpowiedzi na to pytanie.
Wciąż chcę to zrobić, ale Plotmatrix to bzdura. Hadley zaleca zamiast tego używanie pakietu GGally . Posiada funkcję ggpairs, która jest znacznie ulepszonym wykresem par (pozwala na używanie zmiennych nieciągłych w ramkach danych). Wykreśla różne działki na każdym kwadracie, w zależności od zmiennych typów:
library(GGally)
ggpairs(iris, aes(colour = Species, alpha = 0.4))
colour
zmienna musi być czynnikiem; spędził 45 minut, zastanawiając się nad tym.
melt
utworzyć ramkę danych używając zmiennej, którą jesteś zainteresowany jako zmienną id, a następnie przejrzeć inne zmienne.
ggplot(data, aes(x=id, y=value)) + geom_point() + facet_grid(.~variable)
. Zakładam, że mówisz o wykresach rozrzutu, kiedy mówisz „wykres korelacji”, ponieważ inaczej nigdy o tym nie słyszałem.
GGally::ggpairs(iris, aes(colour = Species, alpha=0.4))
Jeśli chce się otrzymać ggplot
obiekt (nie ggmatrix
tak jak w przypadku ggpairs()
), rozwiązaniem jest dwukrotne stopienie danych, a następnie ggplot
fasetowanie. facet_wrap
byłoby lepsze niż facet_grid
w ograniczaniu wykreślanego obszaru, przy podanym scales = 'free'
parametrze.
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')
}