相互作用的热图间接由PheatMap(),Heatmap.2()和Heatmap()生成

Zuguang Gu(z.gu@dkfz.de

2022-04-26

Interactivecomplexheatmap,以下热图可以作为互动闪亮的应用出口:

  1. 直接产生的热图复杂的图像,,,,
  2. 来自其他功能或软件包的热图复杂的图像,,,,
  3. 热图最初由统计:: heatmap(),,,,gplots :: heatmap.2()pheatmap :: pheatmap(),但可以通过“翻译函数”复制:complexheatmap ::: heatmap(),,,,complexheatmap ::: heatmap.2()complexheatmap :: pheatmap()

仅通过调用所有这些类型的热图可以变成互动htshiny()绘制热图后。例如。:

复杂的图像::pheatmap(...)htshiny()

这意味着您无需触摸热图代码。看到R端子中的热图或在文件中生成后,直接致电htshiny()没有争论会产生互动热图,例如魔术。:p

现在有第四种情况,在内部使用的第三方功能会产生热图统计:: heatmap(),,,,gplots :: heatmap.2()或者pheatmap :: pheatmap()。从现在开始,我们无法直接与热图(),,,,热图2()或者pheatmap(),我们如何将这些热图变成互动式?解决方案非常简单。我们只需要去例如pheatmap名称空间并替换pheatmapcomplexheatmap :: pheatmap

以下示例来自SC3包裹功能sc3_plot_expression()内部用途pheatmap()

图书馆(SingleCellexperiment)图书馆(SC3)图书馆(调查)sce < -Singlecellexperiment((测定=列表((计数=as.matrix(yan),logcounts =log2((as.matrix(YAN)+1),Coldata =Rowdata(SCE)$feature_symbol < -隆起(SCE)sce < -sce [重复((Rowdata(SCE)$feature_symbol),],]sce < -runpca(SCE)sce < -SC3(SCE,ks =24,,,,生物学=真的sc3_plot_expression(SCE,k =3

代替内部使用pheatmap :: pheatmapcomplexheatmap :: pheatmap, 我们可以用gientInnamespace()直接更改价值pheatmappheatmap名称空间。之后,回忆起sc3_plot_expression()将直接使用complexheatmap :: pheatmap()现在您可以使用htshiny()将其导出为交互式应用程序。当然,您需要使用相同的代码再生热图。

分配NAMESPACE((“ pheatmap”,complexHeatMap::pheatmap,ns =“ pheatmap”图书馆(InteractiveComplexHeatMap)sc3_plot_expression(SCE,k =3htshiny()

如果您检查了sc3_plot_expression(),,,,pheatmap()通过明确添加其名称空间(检查函数定义的最后几行)来使用:

SelectMethod((“ sc3_plot_expression”,,,,签名=“ SingleCellexperiment”
##方法定义:## ##函数(object,k,show_pdata = null)## {## if(is.null(metadata(object)$ sc3 $ comSensus)){## warning(paste0(请运行)sc3_consens()first!”))## return(object)##} ## hc <-metadata(object)$ sc3 $ sessus [[as.character(k)]] $ hc ## dataSet <-get_processed_dataset(object_dataset(object))## if (!is.null(metadata(object)$sc3$svm_train_inds)) { ## dataset <- dataset[, metadata(object)$sc3$svm_train_inds] ## } ## add_ann_col <- FALSE ## ann <- NULL ## if (!is.null(show_pdata)) { ## ann <- make_col_ann_for_heatmaps(object, show_pdata) ## if (!is.null(ann)) { ## add_ann_col <- TRUE ## rownames(ann) <- colnames(dataset) ## } ## } ## if (nrow(dataset) > 100) { ## do.call(pheatmap::pheatmap, c(list(dataset, cluster_cols = hc, ## kmeans_k = 100, cutree_cols = k, show_rownames = FALSE, ## show_colnames = FALSE), list(annotation_col = ann)[add_ann_col])) ## } ## else { ## do.call(pheatmap::pheatmap, c(list(dataset, cluster_cols = hc, ## cutree_cols = k, show_rownames = FALSE, show_colnames = FALSE), ## list(annotation_col = ann)[add_ann_col])) ## } ## } ##  ##  ## ## Signatures: ## object ## target "SingleCellExperiment" ## defined "SingleCellExperiment"

在这种情况下,改变pheatmappheatmap名称空间直接影响sc3_plot_expression()

但是,如果调用热图函数而不添加名称空间(例如,在上一个示例中,pheatmap ::前缀),您需要首先卸载软件包,修改热图名称空间中的热图功能,然后再加载包装。

让我们看一下下一个示例goexpress函数的软件包heatmap_go()内部使用热图2()

图书馆(goexpress)数据(alvmac)set.seed((4543alvmac_results < -go_analyse((eset =Alvmac,f =“治疗”,,,,Go_genes =alvmac_gogenes,all_go =alvmac_allgo,all_genes =alvmac_allgenes)bp.5< -subset_scores((结果=alvmac_results.pval,名称空间=“生物_Process”,,,,总计=5,,,,p.val =0.05heatmap_go((go_id =“ GO:0034142”,,,,结果=bp.5,,,,eset =Alvmac,cexrow =0.4,,,,cexcol =1,,,,cex.main =1,,,,main.lsplit =30

现在注意heatmap_go()功能,热图2()无需使用GPLOTS名称空间(转到下面列出的函数定义的末尾)。

heatmap_go
##函数(go_id,结果,eset,f = result $ action,subset = null,## gene_names = true,na.names = false,margins = c(7,5),scale =“ none”,## cexcol= 1.2,cexrow = 0.5,labrow = null,cex.main = 1,## trace =“ none”,expr.col = blued(75),row.col.palette =“ accent =“ accent”,## row.col =c(),main = paste(go_id,结果$ go [结果$ go $ go_id == ## go_id,“ name_1006”]),main.lsplit = null,...)## {## if(!all)((c("factor", "GO", "genes") %in% names(result))) { ## stop("'result=' argument misses required slots.\n Is it a GO_analyse() output?") ## } ## if (!go_id %in% result$GO$go_id) { ## stop("go_id: ", go_id, " was not found in result$mapping$go_id.") ## } ## if (!is.null(subset)) { ## eSet <- subEset(eSet = eSet, subset = subset) ## } ## if (length(row.col) != ncol(eSet)) { ## row.col <- brewer.pal(n = length(unique(pData(eSet)[, ## f])), name = row.col.palette) ## } ## gene_ids <- list_genes(go_id = go_id, result = result, data.only = TRUE) ## genes_expr <- t(exprs(eSet)[gene_ids, ]) ## if (is.null(labRow)) { ## labRow <- pData(eSet)[, f] ## } ## else { ## if (length(labRow) == 1) { ## labRow = pData(eSet)[, labRow] ## } ## else if (length(labRow) != ncol(eSet)) { ## stop("The number of custom row labels provided (", ## length(labRow), ") does not match the number of samples (", ## ncol(eSet), ".") ## } ## } ## if (gene_names) { ## gene_labels <- result$genes[gene_ids, "external_gene_name"] ## if (any(gene_labels == "") & !NA.names) { ## gene_labels[gene_labels == ""] <- gene_ids[gene_labels == ## ""] ## } ## } ## else { ## gene_labels <- gene_ids ## } ## if (!is.null(main.Lsplit)) { ## if (is.numeric(main.Lsplit)) { ## main <- string_Lsplit(string = main, line.length = main.Lsplit) ## } ## else { ## stop("main.Lsplit should be a numeric value or NULL.") ## } ## } ## samples.col <- row.col[as.factor(pData(eSet)[, f])] ## op <- par(no.readonly = TRUE) ## on.exit(par(op)) ## par(cex.main = cex.main) ## heatmap.2(genes_expr, labRow = labRow, labCol = gene_labels, ## scale = scale, cexCol = cexCol, cexRow = cexRow, main = main, ## trace = trace, RowSideColors = samples.col, col = expr.col, ## margins = margins, ...) ## } ##  ## 

在这种情况下,由于我们已经加载了goexpress名称空间,goexpress名称空间应首先由分离(), 要不然heatmap_go()仍将使用gplots :: heatmap.2()

分离((“包:goexpress”,,,,unload =真的分配NAMESPACE((“热图2”,complexHeatMap:::热图.2,,,,ns =“ gplots”图书馆(goexpress)图书馆(InteractiveComplexHeatMap)heatmap_go((go_id =“ GO:0034142”,,,,结果=bp.5,,,,eset =Alvmac,cexrow =0.4,,,,cexcol =1,,,,cex.main =1,,,,main.lsplit =30htshiny()

最后,安全更改全部统计:: heatmap(),,,,gplots :: heatmap.2()pheatmap :: pheatmap()complexheatmap ::: heatmap(),,,,complexheatmap ::: heatmap.2()complexheatmap :: pheatmap(),您可以将以下行添加到R会话的开始:

图书馆(pheatmap)图书馆(GPLOTS)分配NAMESPACE((“热图”,complexHeatMap:::热图,ns =“统计”分配NAMESPACE((“热图2”,complexHeatMap:::热图.2,,,,ns =“ gplots”分配NAMESPACE((“ pheatmap”,complexHeatMap::pheatmap,ns =“ pheatmap”

您可以在htshinyexample(8.1),,,,htshinyexample(8.2)htshinyexample(8.3)