Как сказано в комментарии @DrewSteen, p-avlue должен быть той же самой формой боже мой.
Здесь я поставляю функцию, которые вычисляют матрицу p-стоимости (она должна существовать строить - в функции в пакете статистики),
pvalue.matrix <- function(x,...){
ncx <- ncol(x)
r <- matrix(0, nrow = ncx, ncol = ncx)
for (i in seq_len(ncx)) {
for (j in seq_len(i)) {
x2 <- x[, i]
y2 <- x[, j]
r[i, j] <- cor.test(x2,y2,...)$p.value
}
}
r <- r + t(r) - diag(diag(r))
rownames(r) <- colnames(x)
colnames(r) <- colnames(x)
r
}
Then you use the vectorize version of | and & like this
df.cor.sig <- (df.cor > 0.01 | df.cor < -0.01) & pvalue.matrix(df) < 0.5
сюжет классический с geom_tile
library(reshape2) ## melt
library(plyr) ## round_any
library(ggplot2)
dat <- expand.grid(var1=1:4, var2=1:4)
dat$value <- melt(df.cor.sig)$value
dat$labels <- paste(round_any(df.cor,0.01) ,'(', round_any(pvalue.matrix(df),0.01),')',sep='')
ggplot(dat, aes(x=var1,y=var2,label=labels))+
geom_tile(aes(fill = value),colour='white')+
geom_text()

Отредактируйте после разъяснения OP
plots <- apply(dat,1,function(x){
plot.grob <- nullGrob()
if(length(grep(pattern='TRUE',x[3])) >0 ){
gg <- paste('var',c(x[1],x[2]),sep='')
p <- ggplot(subset(df.melt,variable %in% gg ),
aes(x=rownames, y=value, group=variable, colour=variable)) +
geom_line()
plot.grob <- ggplotGrob(p)
}
plot.grob
})
library(gridExtra)
do.call(grid.arrange, plots)
