Ini terlihat sangat mirip dengan contoh dari OP (font, warna, tata letak). Sepertinya aslinya dibuat dengan kisi juga. Jawaban mendetail yang bagus, +1.
Marek
1
Terima kasih atas jawabannya. Banyak orang terbiasa dengan plot korelasi di mana diagonal yang berisi 1-s membentang dari kiri atas ke kotak kanan bawah (lihat gambar contoh di pertanyaan), daripada dari kiri bawah ke kotak kanan atas, seperti di larutan. Berikut adalah cara untuk memperbaiki masalah ini: cor_reversed <- apply (cor, 2, rev); levelplot (t (cor_reversed), ...)
lewati
@ bill_080 mengapa copy-paste kode Anda tidak akan mencetak matriks korelasi?
Pavlos Panteliadis
59
Agak seperti "kurang", tetapi perlu diperiksa (karena memberikan lebih banyak informasi visual):
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 mtcarsdataset:
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 .
bagus (+1)! Meskipun saya akan menambahkan skala pemutusan manual (misalnya :) c(-1, -0.6, -0.3, 0, 0.3, 0.6, 1)dengan "white"di tengah untuk membiarkan warna mencerminkan simetri korelasi yang efisien.
daroczig
@Daroczig - Poin bagus. Sepertinya scale_fill_gradient2()mencapai fungsionalitas yang Anda gambarkan secara otomatis. Saya tidak tahu itu ada.
Untuk membuat diagonal 1 bergerak dari kiri atas ke kanan bawah, diperlukan pembalikan level faktor untuk X1menggunakan:z.m$X1 <- factor(z.m$X1, levels = rev(levels( z.m$X1 )))
arun
11
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")}
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.
Saya tidak yakin apakah menyebutnya 'peta panas' adalah penemuan yang cukup modern. Tampaknya masuk akal jika Anda mencoba menampilkan 'hotspot' dengan menggunakan skema warna merah-oranye-kuning, tetapi secara umum ini hanya plot gambar, atau plot matriks, atau plot raster. Saya akan tertarik untuk menemukan referensi terlama yang menyebutnya 'peta panas'. tldr; "[butuh rujukan]"
Spacedman
Saya pikir Anda benar bahwa peta panas belum tentu merupakan nama paling awal untuk itu. Wikipedia mencantumkan makalah tahun 1957, tetapi saya memeriksa kertas itu dan istilah "peta panas" tidak muncul di mana pun di dalamnya (juga tidak grafiknya terlihat persis seperti bentuk saat ini).
Ari B. Friedman
5
Saya telah mengerjakan sesuatu yang mirip dengan visualisasi yang diposting oleh @daroczig, dengan kode yang diposting oleh @Ulrik menggunakan plotcorr()fungsi ellipsepaket. 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.
Saya menyadari bahwa ini sudah lama, tetapi pembaca baru mungkin tertarik rplot()dari corrrpaket ( https://cran.rstudio.com/web/packages/corrr/index.html ), yang dapat menghasilkan jenis plot @daroczig menyebutkan , tetapi desain untuk pendekatan pipeline data:
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).
Jawaban:
Cepat, kotor, dan kasar:
sumber
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.
sumber
ellipse:plotcorr
.Sangat mudah dengan kisi :: levelplot:
sumber
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. Menggunakanmtcars
dataset:EDIT :
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 .
sumber
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 interaktifX1
menggunakan:z.m$X1 <- factor(z.m$X1, levels = rev(levels( z.m$X1 )))
Gunakan paket corrplot:
Sebagai contoh:
IMO agak elegan
sumber
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/
sumber
Saya telah mengerjakan sesuatu yang mirip dengan visualisasi yang diposting oleh @daroczig, dengan kode yang diposting oleh @Ulrik menggunakan
plotcorr()
fungsiellipse
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.sumber
Saya menyadari bahwa ini sudah lama, tetapi pembaca baru mungkin tertarik
rplot()
daricorrr
paket ( https://cran.rstudio.com/web/packages/corrr/index.html ), yang dapat menghasilkan jenis plot @daroczig menyebutkan , tetapi desain untuk pendekatan pipeline data:sumber
Fungsi corrplot () dari paket corrplot R juga dapat digunakan untuk memplot korelogram.
Beberapa artikel yang menjelaskan cara menghitung dan memvisualisasikan matriks korelasi dipublikasikan di sini:
sumber
Solusi lain yang baru-baru ini saya pelajari adalah peta panas interaktif yang dibuat dengan paket qtlcharts .
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).
sumber
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:
(dari halaman manual)
Paket corrplot mungkin juga - seperti yang disarankan - berguna dengan gambar-gambar cantik yang ditemukan di sini
sumber