Ubah orientasi diagonal plot korelasi menggunakan paket ggcorrplot - jika tipenya atas atau bawah

Saya punya pertanyaan lanjutan di sini.

Orang ini ingin membuat plot korelasi dengan ggcorrplot dari paket ggcorrplot. Namun, mereka ingin agar diagonalnya turun ke bawah matriks, bukan naik dari kiri ke kanan. Jadi, mereka ingin membuat grafiknya terlihat seperti matriks korelasi yang mereka gunakan sebagai masukan:

library(ggcorrplot)
data(mtcars)
corr.mat <- cor(mtcars[, c("mpg", "disp", "hp", "drat", "wt", "carb")])
ggcorrplot(corr.mat)
print(corr.mat)

Solusi berikut diberikan, yang berfungsi dengan baik, selama Anda menggunakan spesifikasi type = full. Namun, jika Anda hanya ingin menampilkan separuh grafik, hasilnya akan kacau:

# This suggested solution works fine:
ggcorrplot(corr.mat[,6:1])
# The same: 
ggcorrplot(corr.mat[,6:1], type = "full")

# Here we have the problem:
ggcorrplot(corr.mat[,6:1], type = "upper")

Adakah yang tahu cara membuat korelogram atas dengan diagonal dari kiri atas ke kanan bawah?


person Poza    schedule 14.05.2021    source sumber
comment
Saya telah melihat ggorrplot; tampaknya merupakan bawaan dari beberapa baris kode yang mereka jalankan secara internal. Cara termudah adalah dengan beralih ke paket lain (sesuai jawaban @elielink), atau mengubah kode yang mendasarinya. Tapi mungkin saya melewatkan sesuatu.   -  person slamballais    schedule 14.05.2021


Jawaban (2)


Anda dapat memplot corr.mat dengan geom_tile secara manual:

library(data.table)
library(ggplot2)
cordt <- as.data.table(corr.mat, keep.rownames = 'col_name')
cordt <- melt(cordt, id.vars = 'col_name', variable.name = 'row_name')

# convert to factor so that rows and columns have the same order as the data
cordt[, row_name := factor(row_name, levels = rev(rownames(corr.mat)))]
cordt[, col_name := factor(col_name, levels = rownames(corr.mat))]

# set diagonal and the top-right half of the matrix to 0 so that those cells appears white
cordt[ncol(corr.mat) - as.integer(row_name) < as.integer(col_name), value := 0]
# remove the last column and the bottom row (where left cells are self correlations only)
cordt <- cordt[as.integer(row_name) < ncol(corr.mat) &
        as.integer(col_name) < ncol(corr.mat)]

ggplot(cordt, aes(x = col_name, y = row_name, fill = value)) +
    geom_tile() +
    scale_fill_gradient2(low = 'blue', high = 'red') +
    labs(x = NULL, y = NULL, fill = 'Corr') +
    theme_minimal()

masukkan deskripsi gambar di sini

person mt1022    schedule 14.05.2021

Ketika saya ingin menampilkan hanya setengah dari matriks korelasi saya menggunakan ini (dari paket GGally):

ggcorr(mtcars[, c("mpg", "disp", "hp", "drat", "wt", "carb")], method = c('everything', "p"))

Namun diagonalnya bukan yang Anda inginkan. Mungkin ada opsi untuk membalikkannya

person elielink    schedule 14.05.2021