Построить матрицу корреляции в граф - PullRequest
92 голосов
/ 28 марта 2011

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

enter image description here

Как мне этого добиться?

Ответы [ 11 ]

58 голосов
/ 28 марта 2011

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

Эллипсы матрицы корреляции : Correlation matrix ellipses Круги матрицы корреляции :Correlation matrix circles

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

55 голосов
/ 28 марта 2011

Быстро, грязно и на стадионе:

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))

enter image description here

43 голосов
/ 28 марта 2011

Очень легко с решеткой :: уровень графика:

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

enter image description here

30 голосов
/ 28 марта 2011

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

library(ggplot2)
library(reshape)

z <- cor(mtcars)
z.m <- melt(z)

ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() + 
scale_fill_gradient(low = "blue",  high = "yellow")

enter image description here

РЕДАКТИРОВАТЬ :

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

enter image description here

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

11 голосов
/ 06 февраля 2014

Используйте пакет 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")
}

Например:

enter image description here

Достаточно элегантный ИМО

9 голосов
/ 28 марта 2011

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

Использование базовой графики: 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/

5 голосов
/ 29 октября 2014

Я работал над чем-то похожим на визуализацию, опубликованную @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))

result of call to plotcor() function

3 голосов
/ 25 июля 2016

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

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

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

enter image description here

2 голосов
/ 31 октября 2014

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

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

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

1 голос
/ 09 марта 2016

Другое решение, о котором я недавно узнал, - это интерактивная тепловая карта, созданная с помощью пакета qtlcharts .

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

Ниже приведено статическое изображение результирующего графика.enter image description here

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...