У меня есть матрица с некоторыми значениями корреляции. Теперь я хочу построить это в графе, который выглядит примерно так:
Как я могу это достичь?
У меня есть матрица с некоторыми значениями корреляции. Теперь я хочу построить это в графе, который выглядит примерно так:
Как я могу это достичь?
Быстро, грязно и в футбольном поле:
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 vignette, на который ссылается @assylias ниже.
Очень просто с решеткой:: levelplot:
z <- cor(mtcars)
require(lattice)
levelplot(z)
Библиотека 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")
ИЗМЕНИТЬ:
ggplot(z.m, 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))
Я понимаю, что это было какое-то время, но новые читатели могут быть заинтересованы в 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 package также может использоваться для построения коррелограммы.
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])
(со страницы man)
Пакет corrplot может также, как предлагается, быть полезным с красивыми изображениями найденным здесь