Ich habe eine Matrix mit einigen Korrelationswerten. Jetzt möchte ich das in einem Diagramm darstellen, das mehr oder weniger so aussieht:
Wie kann ich das erreichen?
Ich habe eine Matrix mit einigen Korrelationswerten. Jetzt möchte ich das in einem Diagramm darstellen, das mehr oder weniger so aussieht:
Wie kann ich das erreichen?
Antworten:
Schnell, dreckig und im Stadion:
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))
Eher "weniger" aussehen, aber es lohnt sich zu überprüfen (um mehr visuelle Informationen zu geben):
Korrelationsmatrixellipsen : Korrelationsmatrixkreise :
Weitere Beispiele finden Sie in der Corrplot-Vignette, auf die @assylias unten verweist.
ellipse:plotcorr
.
Die ggplot2-Bibliothek kann damit umgehen geom_tile()
. Es sieht so aus, als ob in der obigen Darstellung möglicherweise eine Neuskalierung durchgeführt wurde, da keine negativen Korrelationen vorliegen. Berücksichtigen Sie dies bei Ihren Daten. Verwenden des mtcars
Datensatzes:
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")
EDIT :
ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() +
scale_fill_gradient2(low = "blue", high = "yellow")
Ermöglicht die Angabe der Farbe des Mittelpunkts und standardmäßig Weiß. Dies kann hier eine gute Anpassung sein. Weitere Optionen finden Sie hier und hier auf der ggplot-Website .
c(-1, -0.6, -0.3, 0, 0.3, 0.6, 1)
mit "white"
in der Mitte hinzufügen würde , damit die Farben die Symmetrie der Korrelationseffizienz widerspiegeln.
scale_fill_gradient2()
die von Ihnen beschriebene Funktionalität automatisch erreicht. Ich wusste nicht, dass es das gibt.
p <- ggplot(.....) + ... + ....; library(plotly); ggplotly(p)
X1
z.m$X1 <- factor(z.m$X1, levels = rev(levels( z.m$X1 )))
Verwenden Sie das Corrplot-Paket:
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")
}
Beispielsweise:
Eher elegante IMO
Diese Art von Grafik wird unter anderem als "Wärmekarte" bezeichnet. Sobald Sie Ihre Korrelationsmatrix erhalten haben, zeichnen Sie sie mithilfe eines der verschiedenen Tutorials auf.
Verwenden von Basisgrafiken: http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/
Verwenden von ggplot2: http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/
Ich habe an etwas ähnlichem gearbeitet wie der von @daroczig geposteten Visualisierung, wobei der von @Ulrik gepostete Code die plotcorr()
Funktion des ellipse
Pakets verwendet. Ich mag die Verwendung von Ellipsen zur Darstellung von Korrelationen und die Verwendung von Farben zur Darstellung von negativen und positiven Korrelationen. Ich wollte jedoch, dass die auffälligen Farben für Korrelationen nahe 1 und -1 auffallen, nicht für solche nahe 0.
Ich habe eine Alternative geschaffen, bei der weiße Ellipsen farbigen Kreisen überlagert werden. Jede weiße Ellipse ist so bemessen, dass der Anteil des dahinter sichtbaren farbigen Kreises gleich der quadratischen Korrelation ist. Wenn die Korrelation nahe 1 und -1 liegt, ist die weiße Ellipse klein und ein Großteil des farbigen Kreises ist sichtbar. Wenn die Korrelation nahe 0 ist, ist die weiße Ellipse groß und wenig des farbigen Kreises ist sichtbar.
Die Funktion plotcor()
ist unter https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.r verfügbar .
Ein Beispiel für das resultierende Diagramm unter Verwendung des mtcars
Datensatzes ist unten gezeigt.
library(plotrix)
library(seriation)
library(MASS)
plotcor(cor(mtcars), mar=c(0.1, 4, 4, 0.1))
Mir ist klar, dass es eine Weile her ist, aber neue Leser könnten an rplot()
dem corrr
Paket ( https://cran.rstudio.com/web/packages/corrr/index.html ) interessiert sein , das die Art von Plots hervorbringen kann, die @daroczig erwähnt , aber Entwurf für einen Datenpipeline-Ansatz:
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)
Die Funktion corrplot () aus dem Paket corrplot R kann auch zum Zeichnen eines Korrelogramms verwendet werden.
library(corrplot)
M<-cor(mtcars) # compute correlation matrix
corrplot(M, method="circle")
Hier werden mehrere Artikel veröffentlicht, die beschreiben, wie die Korrelationsmatrix berechnet und visualisiert wird:
Eine andere Lösung, die ich kürzlich kennengelernt habe, ist eine interaktive Heatmap, die mit dem qtlcharts- Paket erstellt wurde.
install.packages("qtlcharts")
library(qtlcharts)
iplotCorr(mat=mtcars, group=mtcars$cyl, reorder=TRUE)
Unten sehen Sie ein statisches Bild des resultierenden Diagramms.
Sie können die interaktive Version auf meinem Blog sehen . Bewegen Sie den Mauszeiger über die Heatmap, um die Werte für Zeilen, Spalten und Zellen anzuzeigen. Klicken Sie auf eine Zelle, um ein Streudiagramm mit nach Gruppen gefärbten Symbolen anzuzeigen (in diesem Beispiel ist die Anzahl der Zylinder, 4 ist rot, 6 ist grün und 8 ist blau). Wenn Sie mit der Maus über die Punkte im Streudiagramm fahren, wird der Name der Zeile angezeigt (in diesem Fall die Marke des Fahrzeugs).
Da ich nicht kommentieren kann, muss ich meine 2c auf die Antwort von daroczig als Antwort geben ...
Das Ellipsenstreudiagramm stammt tatsächlich aus dem Ellipsenpaket und wird generiert mit:
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])
(von der Manpage)
Das Corrplot-Paket kann auch - wie vorgeschlagen - bei hübschen Bildern nützlich sein, die hier zu finden sind