python-3.x - 在 ete3 中为热图添加标签

标签 python-3.x visualization phylogeny ete3

我阅读了关于侧面热图生成的整个文档,但我找不到任何方法来向 ete3 生成的热图添加标签。例如,在以下代码中,热图的 7 列名称为“Marker1”到“Marker7”。有什么方法可以将这些名称添加到 ete3 生成的热图中,例如“BarChartFace”可用的“标签”选项?或者唯一的方法是将树移植到 matplotlib 并在那里添加标签?

from ete3 import Tree, TextFace, NodeStyle, TreeStyle, faces, AttrFace, ClusterTree, ProfileFace
PhenoDict={'a':1,'b':0,'c':1}
matrix = """
#Names\tmarker1\tmarker2\tmarker3\tmarker4\tmarker5\tmarker6\tmarker7
a\t1\t-1\t1\t-1\t-1\t-1\t1
b\t-1\t-1\t1\t1\t-1\t-1\t1
c\t1\t1\t1\t-1\t1\t1\t1
"""

t=ClusterTree( "((a,b),c);" , text_array=matrix)

#Defining a function to generate textFace for each node

def ColorCodedNode (node):
    if node.is_leaf():
        ColorCode=PhenoDict[node.name]

        if ColorCode == 0:
            faces.add_face_to_node(AttrFace('name',fsize=20,fgcolor='blue'), node, column=0,aligned=True)
column=1,position='aligned')
            faces.add_face_to_node(ProfileFace(1, -1, 0, width=200, height=40, style='heatmap', colorscheme=2),node,column=1,position='aligned')
        elif ColorCode == 1:
            faces.add_face_to_node(AttrFace("name",fsize=20,fgcolor='red'), node, column=0,aligned=True)
            faces.add_face_to_node(ProfileFace(1, -1, 0, width=200, height=40, style='heatmap', colorscheme=2),node,column=1,position='aligned')


ts = TreeStyle()
ts.layout_fn= ColorCodedNode
ts.show_scale = False
ts.show_leaf_name = False
ts.draw_guiding_lines=True
t.show(tree_style=ts)

现在它生成了这样一棵树,但我需要为热图的每一列添加标签。 enter image description here

最佳答案

部分答案:

我找不到方法,但是您可能对 TreeStylealigned_headeraligned_foot 属性感兴趣:

假设您成功创建了一个轴作为面,名为 axisface。我认为我的回答是部分的,因为我创建这张脸的解决方案是基于 BarChartFace 的不完美解决方法:

from ete3 import BarChartFace

labels = matrix.split('\n')[1].split('\t')[1:]
axisface = BarChartFace([0]*len(labels), width=200, height=0, labels=labels, max_value=1, scale_fsize=1) # Can't get rid of the Y axis tick labels though

然后您可以将它添加到页脚/页眉:

ts.aligned_foot.add_face(axisface, 1)


除了单个面,您还可以为每个标签创建一个 RectFace:

from ete3 import RectFace

for i, lab in enumerate(labels):
    labface = RectFace(50, 200/len(labels), '#fff', '#eee', label={'text':lab, 'fontsize':8, 'color': 'black'})
    labface.rotation = -90
    ts.aligned_foot.add_face(labface, 1+i)

但是矩形没有与每个热图列正确对齐。

关于python-3.x - 在 ete3 中为热图添加标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51366712/

相关文章:

r - 使用 MCMCglmm 预先设置 G,具有分类响应和系统发育

python - 如何解决 python3 的此 pip 错误?

javascript - D3 X轴长标签重叠

neural-network - 卷积神经网络中过滤器的可视化

r - R 中的流图?

r - 构建循环系统发育树

r - 如何使用引导值注释 ggtree 对象?

python - 如何使用 Beautiful Soup 从 <script> 中提取内容

python - 使用列表选择 Pandas MultiIndex DataFrame 中的单元格

python - 当句子的所有关键字都包含在字典中时,如何将句子与字典关联?