在这个小插图中,我演示了如何实现一个闪亮的应用程序来可视化DESeq2结果InteractiveComplexHeatmap包中。
首先,我们运行DESeq2分析气道数据集:
图书馆(气管)数据(气管)气道图书馆(DESeq2)DESeqDataSet(se,设计=~敏捷)rowSums(计数(dds))> =10dds [,]$敏捷=relevel(dds$敏捷,ref =“untrt”)DESeq(dds)结果(dds)as.data.frame(res)
因为我们使用InteractiveComplexHeatmap包裹,我们从热图开始。以下是这款闪亮应用的想法:
我们首先定义几个函数:
make_heatmap ()
:制作特定截断点下的差异基因热图。make_maplot ()
:绘制ma图,高亮选中基因的一个子集。make_volcano ()
:绘制火山图,高亮选定基因的子集。make_maplot ()
而且make_volcano ()
基本上是散点图,它们的定义非常相似。
热图只包含差异基因的信息,也就是说,所有的指数捕获InteractiveComplexHeatmap只局限于差异基因的基质。在make_maplot ()
而且make_volcano ()
,他们期望基因的指标来自于完整的基因集,因此,我们创建了一个环境变量env
这样就节省了差异基因在功能上的完备性和共享性。
图书馆(InteractiveComplexHeatmap)图书馆(ComplexHeatmap)图书馆(circlize)图书馆(GetoptLong)new.env()函数(罗斯福=0.01,base_mean =0,log2fc =0){res$padj< =罗斯福&res$baseMean> =base_mean&腹肌(res$log2FoldChange)> =log2fc;l (is.na(左)]=假如果(总和(左)= =0)返回(零)计数(dds,归一化=真正的)m [l]$row_index =哪一个(左)的热图(t(规模(t(m))),name =“z分数”,top_annotation =HeatmapAnnotation(敏捷=colData(dds)$敏捷,sizeFactor =anno_points(colData(dds)$sizeFactor)show_row_names =假,show_column_names =假,row_km =2,column_title =paste0(总和(左)," FDR <的显著基因"罗斯福)show_row_dend =假)+的热图(log10(res$baseMean [l]+1),show_row_names =假,宽度=单位(5,“毫米”),name =“log10 (baseMean + 1)”,show_column_names =假)+的热图(res$log2FoldChange [l],show_row_names =假,宽度=单位(5,“毫米”),name =“log2FoldChange”,show_column_names =假,坳=colorRamp2(c(-2,0,2),c(“绿色”,“白色”,“红色”)))画(ht,merge_legend =真正的)#突出显示一些基因的ma图函数(res,突出=零){代表(“# 00000020”,nrow(res))代表(0.5,nrow(res))的名字(col) =rownames(res)的名字(cex) =rownames(res)如果(!is.null(强调)){“红色”1res$baseMeanres$log2FoldChange>2] =2<-2] =-2= =“红色”&y<0] =“暗绿色”票面价值(3月=c(4,4,1,1))suppressWarnings(情节(x, y,坳=上校,pch =ifelse(res$log2FoldChange>2|res$log2FoldChange<-2,1,16),cex =cex,日志=“x”,xlab =“baseMean”,ylab =log2倍变化)#突出一些基因的火山图函数(res,突出=零){代表(“# 00000020”,nrow(res))代表(0.5,nrow(res))的名字(col) =rownames(res)的名字(cex) =rownames(res)如果(!is.null(强调)){“红色”1res$log2FoldChange-log10(res$padj)= =“红色”&x<0] =“暗绿色”票面价值(3月=c(4,4,1,1))suppressWarnings(情节(x, y,坳=上校,pch =16,cex =cex,xlab =log2倍变化,ylab =“log10(罗斯福)”)
图书馆(亮)图书馆(shinydashboard)dashboardBody(fluidRow(列(宽度=4,盒子(title =“差热图”,宽度=零,solidHeader =真正的,状态=“主”,originalHeatmapOutput(“ht”,身高=800,遏制=真正的)列(宽度=4,id =“column2”,盒子(title =“Sub-heatmap”,宽度=零,solidHeader =真正的,状态=“主”,subHeatmapOutput(“ht”,title =零,遏制=真正的)盒子(title =“输出”,宽度=零,solidHeader =真正的,状态=“主”,HeatmapInfoOutput(“ht”,title =零)盒子(title =“注意”,宽度=零,solidHeader =真正的,状态=“主”,htmlOutput(“注意”)列(宽度=4,盒子(title =“MA-plot”,宽度=零,solidHeader =真正的,状态=“主”,plotOutput(“ma_plot”)盒子(title =“Volcanno阴谋”,宽度=零,solidHeader =真正的,状态=“主”,plotOutput(“volcanno_plot”)盒子(title =“所选基因结果表”,宽度=零,solidHeader =真正的,状态=“主”,DTOutput(“res_table”)$风格(".content-wrapper, .right side {overflow-x:汽车;}.content {min-width: 1500 px;}")
图书馆(DT)图书馆(GetoptLong)# for qq()函数函数(df,输入,输出,会话){独特的(unlist(df$row_index))env$row_index [row_index]“ma_plot”]] =renderPlot({make_maplot(res,选择)“volcanno_plot”]] =renderPlot({make_volcano(res,选择)“res_table”]] =renderDT(formatRound(数据表(res[选中,c(“baseMean”,“log2FoldChange”,“padj”)),rownames =真正的),列=1:3.,数字=3.)“注意”]] =renderUI({如果(!is.null(df)) {超文本标记语言(qq( Output中捕获的行指数仅对应于差异基因的矩阵。要获得原始矩阵中的行索引,您需要执行:
< >之前L = res$padj <= @{input$fdr} &res$baseMean >= @{输入$base_mean} &abs(res$log2FoldChange) >= @{input$log2fc}l[is.na(l)] = FALSE(左)[row_index]< / >之前,其中res
是来自DESeq2分析的完整数据帧,row_index
是row_index
列,从Output.
"))
dashboardPage(dashboardHeader(title =“DESeq2结果”),dashboardSidebar(selectInput(“罗斯福”,标签=“fdr的截止日期:”,c(“0.001”=0.001,“0.01”=0.01,“0.05”=0.05)),numericInput(“base_mean”,标签=“最小基础平均值:”,值=0),numericInput(“log2fc”,标签=“最小腹肌(log2倍变化):”,值=0),actionButton(“过滤”,标签=“生成的热图”)
函数(输入,输出,会话){observeEvent(输入$过滤器,{make_heatmap(罗斯福=as.numeric(输入$罗斯福),base_mean =输入$base_mean,log2fc =输入$log2fc)如果(!is.null(ht)) {makeInteractiveComplexHeatmap(输入,输出,会话,ht,“ht”,brush_action =brush_action)其他的{#热图图的ID被编码为@{heatmap_id}_heatmap,因此,它在这里是ht_heatmap。$ht_heatmap =renderPlot({grid.newpage()grid.text(“过滤后不存在行。”)ignoreNULL =假)
shinyApp(ui、服务器)
这个应用程序可以直接生成htShinyExample (10.5)
.app的演示如下图所示:
这个函数interactivate ()
InteractiveComplexHeatmap有一个泛型函数interactivate ()
它旨在提供一个API,为包含特定分析结果的对象生成闪亮的应用程序。的实现DESeqDataSet
对象,来自DESeq2分析。它可以简单地用作: