Я наткнулся на этот ответ от @baptiste, который использует пакет gridGraphics
в R для построения нескольких тепловых карт. { ссылка }
Но хотя я смог воссоздать пример (очевидно), мне нужно применить его к моему собственному уникальному состоянию. У меня есть книга Excel с 6 листами. Я хочу построить каждый лист как отдельную тепловую карту, чтобы все 6 тепловых карт были построены в сетке 3х2 (3 тепловых карты расположены одна под другой).
Я очень плохо знаком с R, но я понял, что если я смогу передать все эти листы в arr [[]], я мог бы использовать этот код. Пожалуйста, помогите мне, как это сделать.
Это код, который я пытаюсь адаптировать.
library(gridGraphics)
library(grid)
grab_grob <- function(){
grid.echo()
grid.grab()
}
arr <- replicate(4, matrix(sample(1:100),nrow=10,ncol=10), simplify = FALSE)
library(gplots)
gl <- lapply(1:4, function(i){
heatmap.2(arr[[i]], dendrogram ='row',
Colv=FALSE, col=greenred(800),
key=FALSE, keysize=1.0, symkey=FALSE, density.info='none',
trace='none', colsep=1:10,
sepcolor='white', sepwidth=0.05,
scale="none",cexRow=0.2,cexCol=2,
labCol = colnames(arr[[i]]),
hclustfun=function(c){hclust(c, method='mcquitty')},
lmat=rbind( c(0, 3), c(2,1), c(0,4) ), lhei=c(0.25, 4, 0.25 ),
)
grab_grob()
})
grid.newpage()
library(gridExtra)
grid.arrange(grobs=gl, ncol=2, clip=TRUE)
Спасибо.
edit: Итак, я добавил несколько строк и получил 6 графиков (по 3 в каждой строке), но он отображает только два графика - первый в списке и последний. т.е. тепловая карта для 1-го листа идет в первом ряду (повторяется трижды), а тепловая карта 6-го листа - во втором ряду (повторяется трижды).
for (i in 6) {
arr = as.data.frame(SheetList[i])
g1 <- lapply(1:6, function(j){
heatmap.2(as.matrix(arr[2:7]), dendrogram ='none',
Colv=FALSE, Rowv = FALSE,
key=FALSE, keysize=1.0, symkey=FALSE, density.info='none',
trace='none',
scale="none",cexRow=0.2,cexCol=0.9,
breaks = col_breaks,col=my_palette,
labRow = arr[,1],
hclustfun=function(c){hclust(c, method='mcquitty')},
lmat=rbind(c(0, 3), c(2,1), c(0,4)), lhei=c(0.25, 4, 0.25),
)
grab_grob()
})
}
grid.newpage()
grid.arrange(grobs = g1, ncol=3, clip=TRUE)
Это сюжет, который я получаю