Tôi có một ma trận với một số giá trị tương quan. Bây giờ tôi muốn vẽ biểu đồ đó trong một biểu đồ trông giống như sau:
Làm thế nào tôi có thể đạt được điều đó?
Tôi có một ma trận với một số giá trị tương quan. Bây giờ tôi muốn vẽ biểu đồ đó trong một biểu đồ trông giống như sau:
Làm thế nào tôi có thể đạt được điều đó?
Câu trả lời:
Nhanh chóng, bẩn thỉu và trong sân bóng:
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))
Thay vì trông giống như "ít" hơn, nhưng đáng để kiểm tra (vì cung cấp thêm thông tin trực quan):
Hình elip ma trận tương quan : Vòng tròn ma trận tương quan :
Vui lòng tìm thêm ví dụ trong họa tiết corrplot do @assylias tham khảo bên dưới.
ellipse:plotcorr
.
Thư viện ggplot2 có thể xử lý điều này với geom_tile()
. Có vẻ như có thể đã có một số thay đổi tỷ lệ được thực hiện trong biểu đồ ở trên vì không có bất kỳ mối tương quan tiêu cực nào, vì vậy hãy cân nhắc điều đó với dữ liệu của bạn. Sử dụng mtcars
tập dữ liệu:
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")
CHỈNH SỬA :
ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() +
scale_fill_gradient2(low = "blue", high = "yellow")
cho phép chỉ định màu của điểm giữa và nó mặc định là màu trắng, vì vậy có thể là một điều chỉnh tốt ở đây. Các tùy chọn khác có thể được tìm thấy trên trang web ggplot tại đây và tại đây .
c(-1, -0.6, -0.3, 0, 0.3, 0.6, 1)
:) với "white"
ở giữa để màu sắc phản ánh sự đối xứng của mối tương quan một cách hiệu quả.
scale_fill_gradient2()
đạt được chức năng mà bạn mô tả. Tôi không biết điều đó tồn tại.
p <- ggplot(.....) + ... + ....; library(plotly); ggplotly(p)
sẽ làm cho nó tương tác
X1
sử dụng:z.m$X1 <- factor(z.m$X1, levels = rev(levels( z.m$X1 )))
Sử dụng gói 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")
}
Ví dụ:
IMO thay vì thanh lịch
Loại biểu đồ đó được gọi là "bản đồ nhiệt" trong số các thuật ngữ khác. Khi bạn đã có ma trận tương quan của mình, hãy vẽ biểu đồ bằng một trong các hướng dẫn khác nhau trên mạng.
Sử dụng đồ họa cơ sở: http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/
Sử dụng ggplot2: http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/
Tôi đang làm việc trên một cái gì đó tương tự như hình ảnh được đăng bởi @daroczig, với mã được đăng bởi @Ulrik bằng cách sử dụng plotcorr()
chức năng của ellipse
gói. Tôi thích việc sử dụng các hình elip để thể hiện các mối tương quan và việc sử dụng các màu sắc để thể hiện mối tương quan âm và dương. Tuy nhiên, tôi muốn màu sắc bắt mắt nổi bật với các tương quan gần 1 và -1, không phải cho những màu gần 0.
Tôi đã tạo một giải pháp thay thế trong đó các hình elip màu trắng được phủ trên các vòng tròn màu. Mỗi hình elip màu trắng có kích thước sao cho tỷ lệ của vòng tròn màu có thể nhìn thấy phía sau nó bằng tương quan bình phương. Khi mối tương quan gần 1 và -1, hình elip màu trắng nhỏ và phần lớn vòng tròn màu có thể nhìn thấy được. Khi mối tương quan gần 0, hình elip màu trắng lớn và có thể nhìn thấy một ít hình tròn màu.
Chức năng, plotcor()
có sẵn tại https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.r .
mtcars
Dưới đây là một ví dụ về biểu đồ kết quả sử dụng tập dữ liệu.
library(plotrix)
library(seriation)
library(MASS)
plotcor(cor(mtcars), mar=c(0.1, 4, 4, 0.1))
Tôi nhận ra rằng nó được một thời gian, nhưng độc giả mới có thể được quan tâm rplot()
từ các corrr
gói ( https://cran.rstudio.com/web/packages/corrr/index.html ), có thể sản xuất ra các loại âm mưu @daroczig đề cập đến , nhưng thiết kế cho cách tiếp cận đường ống dữ liệu:
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)
Hàm corrplot () từ gói corrplot R cũng có thể được sử dụng để vẽ biểu đồ tương quan.
library(corrplot)
M<-cor(mtcars) # compute correlation matrix
corrplot(M, method="circle")
một số bài báo mô tả cách tính toán và hình dung ma trận tương quan được xuất bản tại đây:
Một giải pháp khác mà tôi đã tìm hiểu gần đây là một bản đồ nhiệt tương tác được tạo bằng gói qtlcharts .
install.packages("qtlcharts")
library(qtlcharts)
iplotCorr(mat=mtcars, group=mtcars$cyl, reorder=TRUE)
Dưới đây là hình ảnh tĩnh của âm mưu kết quả.
Bạn có thể xem phiên bản tương tác trên blog của tôi . Di chuột qua bản đồ nhiệt để xem các giá trị hàng, cột và ô. Nhấp vào một ô để xem biểu đồ phân tán với các ký hiệu được tô màu theo nhóm (trong ví dụ này, số lượng hình trụ, 4 màu đỏ, 6 màu xanh lá cây và 8 màu xanh lam). Di chuột qua các điểm trong biểu đồ phân tán sẽ đưa ra tên của hàng (trong trường hợp này là cấu tạo của ô tô).
Vì tôi không thể bình luận, tôi phải đưa 2c của tôi cho câu trả lời bởi daroczig với tư cách là một nhà cảm xạ ...
Biểu đồ phân tán ellipse thực sự là từ gói ellipse và được tạo bằng:
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])
(từ trang người đàn ông)
Gói corrplot cũng có thể - theo đề xuất - hữu ích với các hình ảnh đẹp được tìm thấy ở đây