R GGally :: ggpairs, график корреляционной матрицы, как настроить диагностику - PullRequest
1 голос
/ 01 августа 2020

Я хочу построить график корреляции с ggpairs, верхний из которых отображает коэффициент корреляции, а нижняя панель отображает коррелированный точечный график. И вся эта панель будет залита цветом по коэффициенту корреляции. Мой код такой:

###data matrix with sample name
df = data.frame(matrix(data = rexp(200, rate = 0.1), nrow = 20, ncol = 10)) %>%
  `colnames<-`(paste("sample",1:10,sep = ""))

###main plot
p1 = df %>%
  ggpairs(.,lower = list(continuous = wrap("points", size=0.1)),
          upper = list(continuous = wrap("cor", method = "spearman",size= 2)))

###color panel
p2 = df %>% 
  ggcorr(., method = c("everything", "spearman"),
            low = "blue",mid="white",high = "red",limits = c(-1, 1),midpoint = 0,
            label = TRUE,label_round = 2,label_size = 2)
  
###get color 
p = 10
g2 <- ggplotGrob(p2)
colors <- g2$grobs[[6]]$children[[3]]$gp$fill

# Change background color to tiles in the upper and lower triangular matrix of plots 
idx <- 1
for (k1 in 1:(p-1)) {
  for (k2 in (k1+1):p) {
    plt <- getPlot(p1,k1,k2) +
      theme_bw()+theme(panel.background = element_rect(fill=colors[idx],colour = NA),
                       panel.grid.major = element_blank(),
                       panel.grid.minor = element_blank(),
                       plot.background = element_rect(fill=colors[idx],colour = NA))
    p1 <- putPlot(p1,plt,k1,k2)
    idx <- idx+1
  }
}

### lower
idx <- 1
for (k1 in 1:(p-1)) {
  for (k2 in (k1+1):p) {
    plt <- getPlot(p1,k2,k1) +
      theme_bw()+theme(panel.background = element_rect(fill=colors[idx],colour = NA),
                       panel.grid.major = element_blank(),
                       panel.grid.minor = element_blank(),
                       plot.background = element_rect(fill=colors[idx],colour = NA))
    p1 <- putPlot(p1,plt,k2,k1)
    idx <- idx+1
  }
}

###plot
library(grid)
p1+theme(panel.spacing = unit(0, "lines"),
         axis.text.x = element_blank(),
         axis.ticks = element_blank(),
         axis.text.y = element_blank())

окончательный сюжет выглядит следующим образом: введите описание изображения здесь

Однако я хочу, чтобы имя образца отображалось на панели ggpair-diag вместо верхней или нижней лабораторной панели. Как это сделать? Кроме того, есть ли какое-либо решение, чтобы удалить лишний текст "corr" в верхней панели?

1 Ответ

0 голосов
/ 28 августа 2020

Добавьте в свой код axisLabels = "internal":

p1 = df %>%
  ggpairs(.,lower = list(continuous = wrap("points", size=0.1)),
          upper = list(continuous = wrap("cor", method = "spearman",size= 2)), axisLabels = "internal")

Чтобы удалить текст Corr с верхней диагонали, см. здесь

...