У меня есть два набора данных для одного и того же набора переменных, и я могу довольно легко составить тепловую карту корреляции для каждой из них.Тем не менее, я хотел бы объединить две половины двух отдельных корреляционных тепловых карт.Если вы запустите приведенный ниже код, вы сгенерируете две отдельные тепловые карты, которые теоретически могли бы быть выровнены по линии 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)