和Interactivecomplexheatmap,以下热图可以作为互动闪亮的应用出口:
统计:: heatmap()
,,,,gplots :: heatmap.2()
和pheatmap :: pheatmap()
,但可以通过“翻译函数”复制:complexheatmap ::: heatmap()
,,,,complexheatmap ::: heatmap.2()
和complexheatmap :: pheatmap()
。仅通过调用所有这些类型的热图可以变成互动htshiny()
绘制热图后。例如。:
这意味着您无需触摸热图代码。看到R端子中的热图或在文件中生成后,直接致电htshiny()
没有争论会产生互动热图,例如魔术。:p
现在有第四种情况,在内部使用的第三方功能会产生热图统计:: heatmap()
,,,,gplots :: heatmap.2()
或者pheatmap :: pheatmap()
。从现在开始,我们无法直接与热图()
,,,,热图2()
或者pheatmap()
,我们如何将这些热图变成互动式?解决方案非常简单。我们只需要去例如pheatmap名称空间并替换pheatmap
和complexheatmap :: 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 =2:4,,,,生物学=真的)sc3_plot_expression(SCE,k =3)
代替内部使用pheatmap :: pheatmap
和complexheatmap :: pheatmap
, 我们可以用gientInnamespace()
直接更改价值pheatmap
在pheatmap名称空间。之后,回忆起sc3_plot_expression()
将直接使用complexheatmap :: pheatmap()
现在您可以使用htshiny()
将其导出为交互式应用程序。当然,您需要使用相同的代码再生热图。
分配NAMESPACE((“ pheatmap”,complexHeatMap::pheatmap,ns =“ pheatmap”)图书馆(InteractiveComplexHeatMap)sc3_plot_expression(SCE,k =3)htshiny()
如果您检查了sc3_plot_expression()
,,,,pheatmap()
通过明确添加其名称空间(检查函数定义的最后几行)来使用:
##方法定义:## ##函数(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"
在这种情况下,改变pheatmap
在pheatmap名称空间直接影响sc3_plot_expression()
。
但是,如果调用热图函数而不添加名称空间(例如,在上一个示例中,pheatmap ::
前缀),您需要首先卸载软件包,修改热图名称空间中的热图功能,然后再加载包装。
让我们看一下下一个示例goexpress函数的软件包heatmap_go()
内部使用热图2()
。
图书馆(goexpress)数据(alvmac)set.seed((4543)alvmac_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.05)heatmap_go((go_id =“ GO:0034142”,,,,结果=bp.5,,,,eset =Alvmac,cexrow =0.4,,,,cexcol =1,,,,cex.main =1,,,,main.lsplit =30)
现在注意heatmap_go()
功能,热图2()
无需使用GPLOTS名称空间(转到下面列出的函数定义的末尾)。
##函数(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 =30)htshiny()
最后,安全更改全部统计:: 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)
。