Обобщенные матрицы рассеяния в ggplot2?

Я хочу создать сетку с размером N раз N где N количество полей График сетки, который я пытаюсь получить, немного похож на график в Weka: мультиплот, где каждая строка является полем фрейма данных, а каждый столбец также является полем. Хитрость в том, что я хочу получить немного более обобщенную версию матрицы рассеяния. Я хочу иметь больше обогащенных данных, без дубликатов: например, у диагональных значений могут быть распределения.

Weka. Матрица рассеяния тратит много места, можем ли мы обогатить это?

Базовое решение R 1. plot(iris) с той же проблемой тратить пространство, почему у нас есть диагональ?

Выглядит как решение R 2, созданное с помощью базовых команд R из Википедии.

Небольшая демонстрация (слишком много времени для вычислений) в R

library(gridExtra)
library(grid)
library(ggplot2)
#library(lattice)
data(iris) 
p1 <- ggplot(data=iris,aes(x=Sepal.Length, y=Sepal.Length)) + geom_point()
p2 <- ggplot(data=iris,aes(x=Sepal.Length, y=Sepal.Width)) + geom_point()
p3 <- ggplot(data=iris,aes(x=Sepal.Length, y=Petal.Length)) + geom_point()
p4 <- ggplot(data=iris,aes(x=Sepal.Length, y=Petal.Width)) + geom_point()
p5 <- ggplot(data=iris,aes(x=Sepal.Length, y=Species)) + geom_point()
grid.arrange(p1, p2, p3, p4, p5, ncol=length(names(iris)))
#ERROR: In as.list(X): reached elapsed time limit
# https://cran.r-project.org/web/packages/gridExtra/vignettes/arrangeGrob.html

и информация о его сеансе

version 3.4.1 (2017-06-30)
Platform: x86_64-apple-darwin15.6.0 (64-bit)
Running under: macOS High Sierra 10.13.1

Matrix products: default
BLAS: /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/3.4/Resources/lib/libRlapack.dylib

locale:
[1] C

attached base packages:
[1] grid      stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] lattice_0.20-35 gridExtra_2.3   BAS_1.4.7       statsr_0.0.1    dplyr_0.7.4    
[6] ggplot2_2.2.1  

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.14     knitr_1.17       bindr_0.1        magrittr_1.5    
 [5] munsell_0.4.3    colorspace_1.3-2 xtable_1.8-2     R6_2.2.2        
 [9] rlang_0.1.4      plyr_1.8.4       tools_3.4.1      gtable_0.2.0    
[13] htmltools_0.3.6  lazyeval_0.2.0   assertthat_0.2.0 digest_0.6.13   
[17] tibble_1.3.4     bindrcpp_0.2     shiny_1.0.5      glue_1.2.0      
[21] mime_0.5         labeling_0.3     compiler_3.4.1   scales_0.4.1    
[25] httpuv_1.3.5     pkgconfig_2.0.1 
> 

что занимает очень много времени: с моим 1,3 ГГц МВА он даже не завершается и занимает очень много времени для построения или вообще не строится. Я хотел бы найти более современный подход к созданию обобщенных диаграмм рассеяния.

Как я могу создать обобщенные матричные диаграммы рассеяния с ggplot и tidyverse?

Интересные побочные вопросы

  1. Графики рядом с ggplot2

  2. grid.layout в ggplot

  3. Сетка из нескольких графиков ggplot2, созданных в цикле for

1 ответ

Решение

Ключевые поисковые термины

  • Обобщенные графики пар, обобщенная матрица рассеяния

  • матрица рассеяния

который Хэдли обсуждал 2012 здесь. Ниже мы перечисляем альтернативы, пытаясь достичь того же исследовательского анализа, что и исходные матрицы рассеяния.

На момент написания статьи GGally выглядит лучшим кандидатом для работы с ggplot и tideverse. Он построен с помощью ggplot2, и вы можете прочитать об этом здесь.

альтернативы

GGally предложено Марко Сандри

dev.off()
library(GGally)
ggpairs(iris)

и для большего набора данных, вам, возможно, придется изменить cardinality_threshold такой, что

ggpairs(movies[1:15,1:10], cardinality_threshold = 211)

где данные фильма из последнего назначения здесь

который выглядит несколько трудно читаемым с большими наборами данных.

Увы! Вы можете использовать цвета и настроить график ggpairs

где пример отсюда. У GGally здесь отличное руководство.

Другие вопросы по тегам