我试图在jupyter笔记本上绘制一个交互式树状图,在jupyter笔记本上使用不等热图,使用将看上去像这个的package。

我的示例数据dataHeat_arr是numpy.ndarray,它有75行(称为S0到S74)和100列(代谢物称为M0直到M99),并可在链接中使用。
在链接中有3个csv文件。
我根据来自她的例子编写了代码,并做了一些更改,因为我的热垫是不平衡的。
也尝试过questoins 聚类热图(带树状图)/Python
我不知道我在做什么,因为最终的数字是错过了热图。只有在用等量热图绘制时,我才能用树状图绘制热图。
她是我的密码。
进口包装:
import plotly.figure_factory as ff
import numpy as np
np.random.seed(1)
import pandas as pd
import numpy as np
import string
from itables import init_notebook_mode
from itables import show
import cimcb_lite as cb
import plotly.graph_objects as go
init_notebook_mode(all_interactive=True)通过创建上面的树状图:来初始化图形
# name the samples S0 till S74
# Samplenum & name_molec are csv files in the link of Github and should be treated as lists
labels = Samplenum
dataHeat_arr_t= np.transpose(dataHeat_arr)
# Initialize figure by creating upper dendrogram
fig = ff.create_dendrogram(dataHeat_arr, orientation='bottom', labels=labels)
# fig = ff.create_dendrogram(dataHeat_arr_t, orientation='bottom', labels=name_molec[:100] ) ,labels=name_molec[:100]
for i in range(len(fig['data'])):
fig['data'][i]['yaxis'] = 'y2'然后创建侧Dendrogram:
# Create Side Dendrogram
dendro_side = ff.create_dendrogram(dataHeat_arr_t, orientation='right' ,labels=name_molec[:100])
# dendro_side = ff.create_dendrogram(dataHeat_arr, orientation='right', labels=labels)
for i in range(len(dendro_side['data'])):
dendro_side['data'][i]['xaxis'] = 'x2'
# Add Side Dendrogram Data to Figure
for data in dendro_side['data']:
fig.add_trace(data)创建热图:
heatmap = [
go.Heatmap(
x = name_molec[:100],
y =labels ,
z = dataHeat_arr,
colorscale = 'Cividis'
)
]向图中添加热图数据:
for data in heatmap:
fig.add_trace(data)现在的布局:
# Edit Layout
fig.update_layout({'width':1500, 'height':750,
'showlegend':False, 'hovermode': 'closest',
})
# Edit xaxis
fig.update_layout(xaxis={'domain': [.15, 1],
'mirror': False,
'showgrid': False,
'showline': False,
'zeroline': False,
'ticks':""})
# Edit xaxis2
fig.update_layout(xaxis2={'domain': [0, .15],
'mirror': False,
'showgrid': False,
'showline': False,
'zeroline': False,
'showticklabels': False,
'ticks':""})
# Edit yaxis
fig.update_layout(yaxis={'domain': [0, .85],
'mirror': False,
'showgrid': False,
'showline': False,
'zeroline': False,
'showticklabels': False,
'ticks': ""
})
# Edit yaxis2
fig.update_layout(yaxis2={'domain':[0.852, 0.975],
'mirror': False,
'showgrid': False,
'showline': False,
'zeroline': False,
'showticklabels': False,
'ticks':""})
fig.show()出于某种原因,情节看起来是这样的:

任何想法/暗示都将是有用的和见效的!
发布于 2021-07-07 12:38:12
在y轴和x-aix上用树状图绘制热图的正确代码:
通过创建上面的树状图:来初始化图形
Samplenum = ["S" + str(x) for x in idx]
labels = Samplenum
dataHeat_arr_t= np.transpose(dataHeat_arr)
# Initialize figure by creating upper dendrogram
# The line below was changed comparing to my question
fig = ff.create_dendrogram(dataHeat_arr_t, orientation='bottom', labels=name_molec[:99] )
for i in range(len(fig['data'])):
fig['data'][i]['yaxis'] = 'y2'创建侧树图
# The line below was changed as well comparing to my question
dendro_side = ff.create_dendrogram(dataHeat_arr, orientation='right', labels=["S" + str(x) for x in idx])
for i in range(len(dendro_side['data'])):
dendro_side['data'][i]['xaxis'] = 'x2'
# Add Side Dendrogram Data to Figure
for data in dendro_side['data']:
fig.add_trace(data)创建热图:
heatmap = [
go.Heatmap(
x = name_molec[:99],
y =labels ,
z = dataHeat_arr,
colorscale = 'Cividis'
)
]这4行是新的(我的问题中没有):
heatmap[0]['x'] = fig['layout']['xaxis']['tickvals']
heatmap[0]['y'] = dendro_side['layout']['yaxis']['tickvals']
# to tickes text on y-axis as well
fig['layout']['yaxis']['ticktext'] = np.asarray(labels)
fig['layout']['yaxis']['tickvals'] = np.asarray(dendro_side['layout']['yaxis']['tickvals'])大多数布局代码保持不变,但:showticklabels': True
# Edit yaxis
fig.update_layout(yaxis={'domain': [0, .7],
'mirror': False,
'showgrid': False,
'showline': False,
'zeroline': False,
'showticklabels': True,
'ticks': ""
})输出结果看上去更像我问题开头的图片。

https://stackoverflow.com/questions/68256901
复制相似问题