Как можно объединить две половины двух отдельных корреляционных тепловых карт? - PullRequest
0 голосов
/ 03 мая 2019

У меня есть два набора данных для одного и того же набора переменных, и я могу довольно легко составить тепловую карту корреляции для каждой из них.Тем не менее, я хотел бы объединить две половины двух отдельных корреляционных тепловых карт.Если вы запустите приведенный ниже код, вы сгенерируете две отдельные тепловые карты, которые теоретически могли бы быть выровнены по линии 1: 1 и имели бы верхнюю панель с корреляциями из df1, а нижнюю панель с корреляциями из df2.Есть ли какой-нибудь способ вызвать совмещение двух фигур с функциями пакета сетки или иным образом?Или я должен буду принести это в GIMP или что-то еще и организовать их?

library(tidyverse)
library(gridExtra)
library(reshape2)

get_upper_tri <- function(cormat){
    cormat[lower.tri(cormat)]<- NA
    return(cormat)
}

get_lower_tri <- function(cormat){
    cormat[upper.tri(cormat)]<- NA
    return(cormat)
}

df1 <- data.frame(a = rnorm(100, 10),
                  b = rnorm(100, 50),
                  c = rnorm(100, 12),
                  d = rnorm(100, 35))

cor1 <- cor(df1)

cor1 <- get_upper_tri(cor1)

p1 <- melt(cor1) %>%
  filter(is.na(value) == FALSE & value != 1) %>%
  ggplot(., aes(Var1, Var2, fill = value))+
  geom_raster()+
  scale_fill_viridis_c(guide = FALSE)+
  theme(panel.background = element_blank(),
        axis.ticks = element_blank())+
  labs(x = NULL, y = NULL)

df2 <- data.frame(a = rnorm(100, 65),
                  b = rnorm(100, 1),
                  c = rnorm(100, 1000),
                  d = rnorm(100, 500))

cor2 <- cor(df2)

cor2 <- get_lower_tri(cor2)

p1 <- melt(cor1) %>%
  filter(is.na(value) == FALSE) %>%
  ggplot(., aes(Var1, Var2, fill = value))+
  geom_raster()+
  scale_fill_viridis_c(guide = FALSE)+
  theme(panel.background = element_blank(),
        axis.ticks = element_blank())+
  labs(x = NULL, y = NULL)+
  geom_text(aes(label = round(value, 2)))

p2 <- melt(cor2) %>%
  filter(is.na(value) == FALSE) %>%
  ggplot(., aes(Var1, Var2, fill = value))+
  geom_raster()+
  scale_fill_viridis_c(guide = FALSE)+
  theme(panel.background = element_blank(),
        axis.ticks = element_blank())+
  labs(x = NULL, y = NULL)+
  geom_text(aes(label = round(value, 2)))

grid.arrange(p1, p2, ncol = 2)

1 Ответ

0 голосов
/ 03 мая 2019

Почему бы вам просто не объединить данные?

cor_combined <- cor2
cor_combined[upper.tri(cor_combined)] <- cor1[upper.tri(cor1)]
pcombined <- melt(cor_combined) %>%
  filter(is.na(value) == FALSE) %>%
  ggplot(., aes(Var1, Var2, fill = value))+
  geom_raster()+
  scale_fill_viridis_c(guide = FALSE)+
  theme(panel.background = element_blank(),
        axis.ticks = element_blank())+
  labs(x = NULL, y = NULL)+
  geom_text(aes(label = round(value, 2)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...