Mam macierz z pewnymi wartościami korelacji. Teraz chcę to wykreślić na wykresie, który wygląda mniej więcej tak:
Jak mogę to osiągnąć?
Mam macierz z pewnymi wartościami korelacji. Teraz chcę to wykreślić na wykresie, który wygląda mniej więcej tak:
Jak mogę to osiągnąć?
Odpowiedzi:
Szybko, brudno i na boisku:
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))
Wygląda raczej „mniej”, ale warto sprawdzić (podając więcej informacji wizualnych):
Elipsy macierzy korelacji : koła matrycowe związek :
Więcej przykładów można znaleźć w winiecie corrplot, do której odwołuje się @assylias poniżej.
ellipse:plotcorr
.
Biblioteka ggplot2 może sobie z tym poradzić z geom_tile()
. Wygląda na to, że na powyższym wykresie mogło zostać dokonane przeskalowanie, ponieważ nie ma żadnych negatywnych korelacji, więc weź to pod uwagę w swoich danych. Korzystanie ze mtcars
zbioru danych:
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")
EDYCJA :
ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() +
scale_fill_gradient2(low = "blue", high = "yellow")
pozwala określić kolor punktu środkowego i domyślnie jest biały, więc może być tutaj fajnym dopasowaniem. Inne opcje można znaleźć na stronie ggplot tutaj i tutaj .
c(-1, -0.6, -0.3, 0, 0.3, 0.6, 1)
:) ze "white"
środkiem, aby kolory odzwierciedlały symetrię korelacji wydajnej.
scale_fill_gradient2()
na to, że automatycznie uzyskuje opisaną przez Ciebie funkcjonalność. Nie wiedziałem, że istnieje.
p <- ggplot(.....) + ... + ....; library(plotly); ggplotly(p)
uczyni to interaktywnym
X1
przy użyciu:z.m$X1 <- factor(z.m$X1, levels = rev(levels( z.m$X1 )))
Użyj pakietu 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")
}
Na przykład:
Raczej elegancki IMO
Ten typ wykresu nazywany jest między innymi „mapą cieplną”. Gdy masz już macierz korelacji, wykreśl ją za pomocą jednego z różnych samouczków.
Korzystanie z grafiki bazowej: http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/
Korzystanie z ggplot2: http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/
Pracowałem nad czymś podobnym do wizualizacji opublikowanej przez @daroczig, z kodem przesłanym przez @Ulrik za pomocą plotcorr()
funkcji ellipse
pakietu. Podoba mi się używanie elips do przedstawiania korelacji oraz używanie kolorów do przedstawiania korelacji ujemnej i dodatniej. Jednak chciałem, aby przyciągające wzrok kolory wyróżniały się dla korelacji bliskich 1 i -1, a nie dla tych bliskich 0.
Stworzyłem alternatywę, w której białe elipsy są nałożone na kolorowe koła. Każda biała elipsa jest tak zwymiarowana, że proporcja kolorowego koła widocznego za nią jest równa kwadratowej korelacji. Kiedy korelacja jest bliska 1 i -1, biała elipsa jest mała i widoczna jest większość kolorowego koła. Kiedy korelacja jest bliska 0, biała elipsa jest duża i widoczna jest niewielka część kolorowego koła.
Funkcja,, plotcor()
jest dostępna pod adresem https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.r .
Przykład wynikowego wykresu przy użyciu mtcars
zestawu danych przedstawiono poniżej.
library(plotrix)
library(seriation)
library(MASS)
plotcor(cor(mtcars), mar=c(0.1, 4, 4, 0.1))
Zdaję sobie sprawę, że minęło trochę czasu, ale nowi czytelnicy mogą być zainteresowani rplot()
z corrr
pakietu ( https://cran.rstudio.com/web/packages/corrr/index.html ), który może wytwarzać rodzaje działek @daroczig wspomina , ale zaprojektuj podejście do potoku danych:
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 () funkcję z corrplot pakiecie R można również wykorzystać do wykreślenia korelogram.
library(corrplot)
M<-cor(mtcars) # compute correlation matrix
corrplot(M, method="circle")
kilka artykułów opisujących sposób obliczania i wizualizacji macierzy korelacji zostało opublikowanych tutaj:
Innym rozwiązaniem, o którym niedawno się dowiedziałem, jest interaktywna mapa ciepła utworzona za pomocą pakietu qtlcharts .
install.packages("qtlcharts")
library(qtlcharts)
iplotCorr(mat=mtcars, group=mtcars$cyl, reorder=TRUE)
Poniżej znajduje się statyczny obraz powstałej fabuły.
Możesz zobaczyć interaktywną wersję na moim blogu . Umieść wskaźnik myszy na mapie termicznej, aby wyświetlić wartości wiersza, kolumny i komórki. Kliknij komórkę, aby zobaczyć wykres rozrzutu z symbolami pokolorowanymi według grup (w tym przykładzie liczba cylindrów 4 jest czerwona, 6 jest zielona, a 8 niebieska). Najechanie kursorem na punkty na wykresie rozrzutu powoduje wyświetlenie nazwy wiersza (w tym przypadku marki samochodu).
Ponieważ nie mogę komentować, muszę dać moje 2c na odpowiedź daroczig jako odpowiedź ...
Wykres punktowy elipsy faktycznie pochodzi z pakietu elipsy i został wygenerowany za pomocą:
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])
(ze strony podręcznika)
Pakiet corrplot może również - zgodnie z sugestią - być przydatny w przypadku ładnych obrazków, które znajdują się tutaj