У меня есть матрица с некоторыми значениями корреляции. Теперь я хочу изобразить это на графике, который выглядит примерно так:
Как я могу этого добиться?
r
ggplot2
plot
correlation
Хенрик
источник
источник
Ответы:
Быстро, грязно и приблизительно:
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))
источник
Скорее «меньше» выглядит, но стоит проверить (как дает больше наглядной информации):
Корреляционная матрица эллипсы : Корреляция матричные круги :
Дополнительные примеры можно найти в виньетке коррплота, на которую ссылается @assylias ниже.
источник
ellipse:plotcorr
.Очень просто с lattice :: 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 здесь и здесь .
источник
c(-1, -0.6, -0.3, 0, 0.3, 0.6, 1)
:)"white"
в середине, чтобы цвета отражали симметрию эффективной корреляции.scale_fill_gradient2()
обеспечивает автоматически описанную вами функциональность. Я не знал, что это существует.p <- ggplot(.....) + ... + ....; library(plotly); ggplotly(p)
сделает его интерактивнымX1
z.m$X1 <- factor(z.m$X1, levels = rev(levels( z.m$X1 )))
Используйте пакет 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(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 ...
График рассеяния эллипса действительно взят из пакета ellipse и создан с помощью:
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 также может - как предлагается - быть полезен с красивыми изображениями, найденными здесь
источник