【发布时间】:2021-09-16 06:43:23
【问题描述】:
我正在尝试使用 look like this one 的 Plotly 包在 jupyter 笔记本上绘制带有 不等热图 的 交互式 树状图。
我的示例数据名为 dataHeat_arr 是 numpy.ndarray,它有 75 行(样本称为 S0 到 S74)和 100 列(代谢物称为 M0 到 M99),可在 link 中找到。
link 中有 3 个 csv 文件。
- dataHeat_arr.csv - numpy.ndarray 75*100
- name_molec.csv - 名为 M0、M1、... 直到 M99 的代谢物列表
- Samplenum.csv - 名为 S0、S1、... 直到 S74 的样本列表
我的代码基于her 中的示例并进行了一些更改,因为我的热垫不相等。
也试过questoins Plotly clustered heatmap (with dendrogram)/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'
然后创建侧树状图:
# 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()
由于某种原因,情节看起来像这样:
任何想法/提示都会被我们充分利用!
【问题讨论】:
标签: jupyter-notebook heatmap plotly-python dendrogram