Saya memiliki matriks dengan beberapa nilai korelasi. Sekarang saya ingin memplotnya dalam grafik yang terlihat kurang lebih seperti itu:
Bagaimana saya bisa mencapai itu?
Saya memiliki matriks dengan beberapa nilai korelasi. Sekarang saya ingin memplotnya dalam grafik yang terlihat kurang lebih seperti itu:
Bagaimana saya bisa mencapai itu?
Jawaban:
Cepat, kotor, dan kasar:
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))
Agak seperti "kurang", tetapi perlu diperiksa (karena memberikan lebih banyak informasi visual):
Elips matriks korelasi :
lingkaran korelasi matriks :
Silakan temukan lebih banyak contoh dalam sketsa corplot yang direferensikan oleh @assylias di bawah ini.
ellipse:plotcorr
.
Library ggplot2 dapat menangani ini dengan geom_tile()
. Sepertinya telah dilakukan penskalaan ulang pada plot di atas karena tidak ada korelasi negatif, jadi pertimbangkan hal itu dengan data Anda. Menggunakan mtcars
dataset:
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")
memungkinkan untuk menentukan warna titik tengah dan defaultnya putih jadi mungkin penyesuaian yang bagus di sini. Opsi lain dapat ditemukan di situs ggplot di sini dan di sini .
c(-1, -0.6, -0.3, 0, 0.3, 0.6, 1)
dengan "white"
di tengah untuk membiarkan warna mencerminkan simetri korelasi yang efisien.
scale_fill_gradient2()
mencapai fungsionalitas yang Anda gambarkan secara otomatis. Saya tidak tahu itu ada.
p <- ggplot(.....) + ... + ....; library(plotly); ggplotly(p)
akan membuatnya interaktif
X1
menggunakan:z.m$X1 <- factor(z.m$X1, levels = rev(levels( z.m$X1 )))
Gunakan paket 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")
}
Sebagai contoh:
IMO agak elegan
Jenis grafik itu disebut "peta panas" di antara istilah-istilah lainnya. Setelah Anda mendapatkan matriks korelasi, buat plot menggunakan salah satu dari berbagai tutorial di luar sana.
Menggunakan grafik dasar: http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/
Menggunakan ggplot2: http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/
Saya telah mengerjakan sesuatu yang mirip dengan visualisasi yang diposting oleh @daroczig, dengan kode yang diposting oleh @Ulrik menggunakan plotcorr()
fungsi ellipse
paket. Saya suka penggunaan elips untuk mewakili korelasi, dan penggunaan warna untuk mewakili korelasi negatif dan positif. Namun demikian, saya ingin warna yang menarik terlihat menonjol untuk korelasi yang mendekati 1 dan -1, bukan untuk yang mendekati 0.
Saya membuat alternatif di mana elips putih dilapisi pada lingkaran berwarna. Setiap elips putih berukuran sehingga proporsi lingkaran berwarna yang terlihat di belakangnya sama dengan korelasi kuadrat. Ketika korelasinya mendekati 1 dan -1, elips putih kecil, dan banyak lingkaran berwarna yang terlihat. Ketika korelasi mendekati 0, elips putih besar, dan sedikit lingkaran berwarna terlihat.
Fungsinya,, plotcor()
tersedia di https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.r .
Contoh plot yang dihasilkan menggunakan mtcars
dataset ditunjukkan di bawah ini.
library(plotrix)
library(seriation)
library(MASS)
plotcor(cor(mtcars), mar=c(0.1, 4, 4, 0.1))
Saya menyadari bahwa ini sudah lama, tetapi pembaca baru mungkin tertarik rplot()
dari corrr
paket ( https://cran.rstudio.com/web/packages/corrr/index.html ), yang dapat menghasilkan jenis plot @daroczig menyebutkan , tetapi desain untuk pendekatan pipeline data:
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)
Fungsi corrplot () dari paket corrplot R juga dapat digunakan untuk memplot korelogram.
library(corrplot)
M<-cor(mtcars) # compute correlation matrix
corrplot(M, method="circle")
Beberapa artikel yang menjelaskan cara menghitung dan memvisualisasikan matriks korelasi dipublikasikan di sini:
Solusi lain yang baru-baru ini saya pelajari adalah peta panas interaktif yang dibuat dengan paket qtlcharts .
install.packages("qtlcharts")
library(qtlcharts)
iplotCorr(mat=mtcars, group=mtcars$cyl, reorder=TRUE)
Di bawah ini adalah gambar statis dari plot yang dihasilkan.
Anda dapat melihat versi interaktif di blog saya . Arahkan kursor ke peta panas untuk melihat nilai baris, kolom, dan sel. Klik pada sel untuk melihat diagram sebar dengan simbol yang diwarnai menurut kelompok (dalam contoh ini, jumlah silinder, 4 berwarna merah, 6 berwarna hijau, dan 8 berwarna biru). Mengarahkan kursor ke titik-titik di sebar memberikan nama baris (dalam hal ini merek mobil).
Karena saya tidak bisa berkomentar, saya harus memberikan 2c saya untuk jawaban daroczig sebagai jawaban ...
Plot sebaran elips memang dari paket elips dan dibuat dengan:
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])
(dari halaman manual)
Paket corrplot mungkin juga - seperti yang disarankan - berguna dengan gambar-gambar cantik yang ditemukan di sini