Матрица корреляции сюжетов в граф

У меня есть matrix с некоторыми значениями корреляции. Теперь я хочу построить это на графике, который выглядит примерно так:

введите описание изображения здесь

Как я могу это достичь?

Быстро, грязно, и в футбольном поле:

library(lattice) #Build the horizontal and vertical axis information hor <- c("214", "215", "216", "224", "211", "212", "213", "223", "226", "225") ver <- paste("DM1-", hor, sep="") #Build the fake correlation matrix nrowcol <- length(ver) cor <- matrix(runif(nrowcol*nrowcol, min=0.4), nrow=nrowcol, ncol=nrowcol, dimnames = list(hor, ver)) for (i in 1:nrowcol) cor[i,i] = 1 #Build the plot rgb.palette <- colorRampPalette(c("blue", "yellow"), space = "rgb") levelplot(cor, main="stage 12-14 array correlation matrix", xlab="", ylab="", col.regions=rgb.palette(120), cuts=100, at=seq(0,1,0.01)) 

введите описание изображения здесь

Скорее «меньше», но стоит проверить (как предоставление большей визуальной информации):

Корреляционные матричные эллипсы : Эллипсы матрицы корреляции Корреляционные матрицы : Корреляционные матрицы

Дополнительную информацию можно найти в виньетке corrplot, на которую ссылается @assylias.

Очень просто с решеткой :: levelplot:

 z <- cor(mtcars) require(lattice) levelplot(z) 

введите описание изображения здесь

Библиотека ggplot2 может обрабатывать это с помощью geom_tile() . Похоже, что в этом сюжете, возможно, было какое-то перемасштабирование, поскольку нет никаких отрицательных корреляций, поэтому учтите это с вашими данными. Используя dataset mtcars :

 library(ggplot2) library(reshape) z <- cor(mtcars) zm <- melt(z) ggplot(zm, aes(X1, X2, fill = value)) + geom_tile() + scale_fill_gradient(low = "blue", high = "yellow") 

введите описание изображения здесь

EDIT :

 ggplot(zm, aes(X1, X2, fill = value)) + geom_tile() + scale_fill_gradient2(low = "blue", high = "yellow") 

введите описание изображения здесь

позволяет указать цвет средней точки и по умолчанию белый, поэтому здесь может быть приятная настройка. Другие варианты можно найти на веб-сайте ggplot здесь и здесь .

Используйте пакет corrplot:

 library(corrplot) data(mtcars) M <- cor(mtcars) ## different color series col1 <- colorRampPalette(c("#7F0000","red","#FF7F00","yellow","white", "cyan", "#007FFF", "blue","#00007F")) col2 <- colorRampPalette(c("#67001F", "#B2182B", "#D6604D", "#F4A582", "#FDDBC7", "#FFFFFF", "#D1E5F0", "#92C5DE", "#4393C3", "#2166AC", "#053061")) col3 <- colorRampPalette(c("red", "white", "blue")) col4 <- colorRampPalette(c("#7F0000","red","#FF7F00","yellow","#7FFF7F", "cyan", "#007FFF", "blue","#00007F")) wb <- c("white","black") par(ask = TRUE) ## different color scale and methods to display corr-matrix corrplot(M, method="number", col="black", addcolorlabel="no") corrplot(M, method="number") corrplot(M) corrplot(M, order ="AOE") corrplot(M, order ="AOE", addCoef.col="grey") corrplot(M, order="AOE", col=col1(20), cl.length=21,addCoef.col="grey") corrplot(M, order="AOE", col=col1(10),addCoef.col="grey") corrplot(M, order="AOE", col=col2(200)) corrplot(M, order="AOE", col=col2(200),addCoef.col="grey") corrplot(M, order="AOE", col=col2(20), cl.length=21,addCoef.col="grey") corrplot(M, order="AOE", col=col2(10),addCoef.col="grey") corrplot(M, order="AOE", col=col3(100)) corrplot(M, order="AOE", col=col3(10)) corrplot(M, method="color", col=col1(20), cl.length=21,order = "AOE", addCoef.col="grey") if(TRUE){ corrplot(M, method="square", col=col2(200),order = "AOE") corrplot(M, method="ellipse", col=col1(200),order = "AOE") corrplot(M, method="shade", col=col3(20),order = "AOE") corrplot(M, method="pie", order = "AOE") ## col=wb corrplot(M, col = wb, order="AOE", outline=TRUE, addcolorlabel="no") ## like Chinese wiqi, suit for either on screen or white-black print. corrplot(M, col = wb, bg="gold2", order="AOE", addcolorlabel="no") } 

Например:

введите описание изображения здесь

Довольно элегантный ИМО

Этот тип графа называется «тепловой картой» среди других терминов. Как только вы получите свою корреляционную матрицу, зарисуйте ее, используя один из различных обучающих программ.

Использование базовой графики: http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/

Использование ggplot2: http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/

Я работал над чем-то похожим на визуализацию, опубликованную @daroczig, с кодом, опубликованным @Ulrik, с использованием функции plotcorr() пакета ellipse . Мне нравится использование эллипсов для представления корреляций и использование цветов для представления отрицательной и положительной корреляции. Однако я хотел, чтобы привлекательные цвета выделялись для корреляций, близких к 1 и -1, а не для близких к 0.

Я создал альтернативу, в которой белые эллипсы накладываются на цветные круги. Каждый белый эллипс имеет размер, так что пропорция цветного круга, видимого за ним, равна квадрату корреляции. Когда корреляция близка к 1 и -1, белый эллипс мал, и большая часть цветного круга видна. Когда корреляция близка к 0, белый эллипс большой, и мало видно цветного круга.

Функция plotcor() доступна по адресу https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.r .

Ниже приведен пример полученного графика с использованием набора данных mtcars .

 library(plotrix) library(seriation) library(MASS) plotcor(cor(mtcars), mar=c(0.1, 4, 4, 0.1)) 

результат вызова функции plotcor ()

Я понимаю, что это было давно, но новые читатели могут быть заинтересованы в rplot() из пакета corrr ( https://cran.rstudio.com/web/packages/corrr/index.html ), который может создавать виды сюжеты @daroczig упоминает, но дизайн для подхода к конвейеру данных:

 install.packages("corrr") library(corrr) mtcars %>% correlate() %>% rplot() 

введите описание изображения здесь

 mtcars %>% correlate() %>% rearrange() %>% rplot() 

введите описание изображения здесь

 mtcars %>% correlate() %>% rearrange() %>% rplot(shape = 15) 

введите описание изображения здесь

 mtcars %>% correlate() %>% rearrange() %>% shave() %>% rplot(shape = 15) 

введите описание изображения здесь

 mtcars %>% correlate() %>% rearrange(absolute = FALSE) %>% rplot(shape = 15) 

введите описание изображения здесь

Функция corrplot () из пакета corrplot R также может использоваться для построения коррелограммы.

 library(corrplot) M<-cor(mtcars) # compute correlation matrix corrplot(M, method="circle") 

здесь публикуются несколько статей, описывающих, как вычислить и визуализировать корреляционную матрицу:

Еще одно решение, о котором я недавно узнал, – это интерактивная тепловая карта, созданная с пакетом qtlcharts .

 install.packages("qtlcharts") library(qtlcharts) iplotCorr(mat=mtcars, group=mtcars$cyl, reorder=TRUE) 

Ниже приведено статическое изображение полученного графика. введите описание изображения здесь

Вы можете увидеть интерактивную версию в моем блоге . Наведите указатель мыши на карту нагрева, чтобы увидеть значения строк, столбцов и ячеек. Нажмите на ячейку, чтобы увидеть диаграмму рассеяния с символами, окрашенными по группам (в этом примере число цилиндров, 4 красное, 6 зеленое, а 8 – синее). При наведении курсора на точки в диаграмме рассеивания указывается название строки (в данном случае марка автомобиля).

Поскольку я не могу комментировать, я должен отдать свой 2c на ответ daroczig как anwser …

График рассеяния эллипса действительно из пакета эллипса и генерируется с помощью:

 corr.mtcars <- cor(mtcars) ord <- order(corr.mtcars[1,]) xc <- corr.mtcars[ord, ord] colors <- c("#A50F15","#DE2D26","#FB6A4A","#FCAE91","#FEE5D9","white", "#EFF3FF","#BDD7E7","#6BAED6","#3182BD","#08519C") plotcorr(xc, col=colors[5*xc + 6]) 

(со страницы руководства)

Пакет corrplot может также, как предлагается, быть полезен с красивыми изображениями, найденными здесь

  • индекс возврата из вектора значения, ближайшего к данному элементу
  • Как вставить элементы в вектор?
  • Добавление текста в таблицу grid.table
  • если / else строит внутренние и внешние функции
  • Преобразование десятичного в двоичный в R?
  • Добавить переменную в кадр данных, содержащий максимальное значение каждой строки
  • Извлечение строк для первого вхождения переменной в фрейм данных
  • Как сортировать буквы в строке?
  • Найдите, сколько раз повторяющиеся строки повторяются в кадре данных R
  • Как удалить все объекты, кроме одного из рабочей области в R?
  • Лучший способ конвертировать список в вектор?
  • Давайте будем гением компьютера.