交互式系统发育和热图图:单击系统发育中的节点并显示各种热图子集

问题描述

我想创建一个交互式图,在其中展示某些特征如何在系统发育(或树)中发生变化。我的数据由一个系统发育(有 N 个提示)、一个特征矩阵(跨 N 个提示的 T 个特征的特征值)和一个向量组成,该向量将特征与系统发育节点相关(例如,让一个特征具有0 对于除 2 个密切相关的提示之外的所有提示,那么该特征将与两个密切相关的提示的父节点相关,这些提示的该特征具有非零值;示例如下)。 >

最终的交互图将由两部分组成:系统发育(可以点击节点)和可变热图(大小为 N 提示乘以 S 特征,其中 S 特征与特定的相关节点)。显示的热图将仅包括特征的子集 S,具体取决于点击的系统发育节点。 下面,我准备了系统发育和一些数据。系统发育和热图是用 phytools::phylo.heatmap 绘制的,这几乎是我希望我的图的样子。

理想情况下,我会在 R plotly(或闪亮)中绘制它,因为我最习惯使用 R,但我还没有找到一个示例来展示如何执行此操作或类似操作。我想我需要为每个节点创建一个热图,然后以某种方式将点击的节点与特定的热图“连接”,但我还没有找到一个教程,它可以让一个人以交互方式做到这一点(只有类似 gif 的动画/可视化比如说,有些东西会随着时间而改变,一开始就可以点击播放)。 我根据本教程创建了下面的 plot_dendro:https://plotly-r.com/client-side-linking.html

任何有关如何解决此问题的建议将不胜感激!

library(ape)
library(phytools)
set.seed(2021)
# generate tree
phylo <- rtree(8)
plot.phylo(phylo)
nodelabels(node = c(9:15))
edgelabels(edge = c(1:nrow(phylo$edge)))

# generate heatmap
values <- matrix(rnorm(80),nrow = 10,ncol = 8)
colnames(values) <- phylo$tip.label
# rows 1-4: descendants of node 12,5-8 of 14,9-10 of 9
values[1:4,1:2] <- values[1:4,1:2] + 10
values[5:8,3:5] <- values[5:8,3:5] + 10
values[9:10,] <- values[9:10,] + 10
values <- round(values,digits = 2)
assignment <- c(rep(12,4),rep(14,rep(9,2))
rownames(values) <- assignment
values
# plot full heatmap
phylo.heatmap(phylo,t(values),standardize=FALSE)
# phylo.heatmap(phylo,standardize=FALSE)

# want to achieve: click on node and display subset of heatmap
# click on node 12:
phylo.heatmap(phylo,t(values)[,1:4],standardize=FALSE)
# click on node 14:
phylo.heatmap(phylo,5:8],standardize=FALSE)
# click on node 9 (root):
phylo.heatmap(phylo,9:10],standardize=FALSE)

# plotly attempt
library(plotly)
library(phylogram)
# must convert to ultrametric tree
p_um=chronos(phylo,lambda=0)  
dendy <- as.dendrogram.phylo(p_um)
plot_dendro(dendy) %>% 
  highlight("plotly_click",dynamic = TRUE) #%>%
  highlight("plotly_selected",dynamic = TRUE,persistent = TRUE)
# this somewhat works: hovering on node works,shows number of descendants,which is correct for most
# nodes except for parent of t4 and t6 (node has 2 descendants,if hovered on it shows 8)
# select tool quite works,but it doesn't necessarily reset when clicking on a different node...

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...