我有这个回调函数,可以生成热图和可选的树状图。但是,在创建树状图时,该图缺少yticklabels。我希望标签显示在树状图的左侧或热图的右侧。
@app.callback(
Output('peakAreas','figure'),[Input('b_peakAreas','n_clicks'),Input('table','derived_virtual_indices'),Input('checklist','value')]) def plot_0(n_clicks,ndxs,options):
title = 'Heatmap'
if n_clicks is None:
return {}
df = mint.crosstab.T.iloc[ndxs]
df.index = [basename(i).replace('.mzXML','') for i in df.index]
if 'normed' in options:
df = df / df.max()
title = f'Normalized {title}'
if 'clustered' in options:
D = squareform(pdist(df,metric='euclidean'))
Y = linkage(D,method='complete')
Z = dendrogram(Y,orientation='left',no_plot=True)['leaves']
df = df.iloc[Z,:]
dendro_side = ff.create_dendrogram(df,orientation='right')
heatmap = go.Heatmap(z=df.values,x=df.columns,y=df.index,colorscale = 'Blues')
if not 'dendrogram' in options:
fig = go.Figure(heatmap)
fig.update_layout(
title={'text': title,},yaxis={'title': '','tickmode': 'array','automargin': True})
return fig
fig = go.Figure()
for i in range(len(dendro_side['data'])):
dendro_side['data'][i]['xaxis'] = 'x2'
for data in dendro_side['data']:
fig.add_trace(data)
y_labels = heatmap['y']
heatmap['y'] = dendro_side['layout']['yaxis']['tickvals']
dendro_side['layout']['yaxis']['ticktext'] = y_labels
fig.add_trace(heatmap)
fig.update_layout({'showlegend':False,'hovermode': 'closest'})
fig.update_layout(
title={'text': title,'automargin': True})
fig.update_layout(xaxis2={'domain': [0,.1],'mirror': False,'showgrid': True,'showline': False,'zeroline': False,'showticklabels': False,'ticks':""})
fig.update_layout(xaxis={'domain': [.1,1],'showgrid': False,'showticklabels': True,'ticks':""})
# Edit yaxis
fig.update_layout(yaxis={'domain': [0,})
fig.update_layout(yaxis_ticktext = y_labels)
print(dendro_side.layout['yaxis'])
return fig
当我绘制y轴布局时,我得到以下信息:
layout.YAxis({
'mirror': 'allticks','rangemode': 'tozero','showline': True,'ticks': 'outside','ticktext': array(['SA1','SA3','SA2','SA4','CA1','CA2','CA3','CA4','EC2','EC4','EC1','EC3'],dtype=object),'tickvals': [5.0,15.0,25.0,35.0,45.0,55.0,65.0,75.0,85.0,95.0,105.0,115.0],'type': 'linear','zeroline': False
})
因此,对我来说,由于正确的数据存储在ticktext下,因此图形应该具有正确的标签。但是它没有出现。