从头开始实现交互式热图

祖光谷(z.gu@dkfz.de

2022-10-02

InteractiveComplexHeatmap,我们主要使用的组合InteractiveComplexHeatmapOutput ()而且makeInteractiveComplexHeatmap ()在Shiny应用程序中创建交互式热图小部件。交互式小部件包含许多用于操作热图的工具。然而,有时用户可能想要构建自己的交互式热图小部件,例如定义自己的逻辑来响应热图上的点击或刷屏事件,而不使用InteractiveComplexHeatmap.他们只想要从热图中选择的热图单元格的信息。

InteractiveComplexHeatmap还提供直接返回从热图中选择的行和列信息的低级函数。我将在下一个例子中演示这种用法用户界面而且服务器定义如下:

ui =fluidPage…,plotOutput“热图”单击=“heatmap_click”服务器=函数(输入,输出,会话){ht_obj =reactiveValht_pos_obj =reactiveVal输出热图=renderPlot({...ht =的热图(垫))ht_pos =htPositionsOnDevice(ht)ht_obj(ht)ht_pos_obj(ht_pos)})observeEvent(输入heatmap_click, {pos =getPositionFromClick(输入heatmap_click)df =selectPositionht_obj(pos)马克=ht_pos =ht_pos_obj(),verbose =#使用' df '做一些事情...})

有两点需要注意。

  1. 画()而且htPositionsOnDevice ()应该总是一起执行并放在里面吗renderPlot ()这样可以正确计算出所有热图切片的位置。
  2. 使用getPositionFromClick ()要检索热图上点击的位置,则可以将位置发送到selectPosition ()对应于原来的矩阵。同样的,getPositionFromBrush ()而且selectArea ()合作检索矩阵中与热图中所选区域对应的行和列。

的变量df包含所选单元格的行索引和列索引(检查的帮助页selectPosition ()而且selectArea ()的格式df).有了这些信息,就可以从头开始实现交互式热图小部件。

htShinyExample (5.8)演示了一个示例,其中热图的交互性仅使用来自的函数实现闪亮的.在这个例子中,主热图显示了一个2D密度分布,刷热图会触发一个新的2D密度估计,但只对选定的数据子集进行估计。生成这个示例的源代码也包含在这个web应用程序中。