У меня есть этот обратный вызов, который генерирует тепловую карту и, необязательно, дендрограмму. Тем не менее, когда дендрограмма создана, в графе отсутствуют метки-метки. Я хотел бы, чтобы надписи отображались с левой стороны дендрограммы или с правой стороны карты тепла.
@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, },
yaxis={'title': '',
'tickmode': 'array',
'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],
'mirror': False,
'showgrid': False,
'showline': False,
'zeroline': False,
'showticklabels': True,
'ticks':""})
# Edit yaxis
fig.update_layout(yaxis={'domain': [0, 1],
'mirror': False,
'showgrid': False,
'showline': False,
'zeroline': False,
'showticklabels': True,
})
fig.update_layout(yaxis_ticktext = y_labels)
print(dendro_side.layout['yaxis'])
return fig
Когда я строю макет оси Y, я получаю следующее:
layout.YAxis({
'mirror': 'allticks',
'rangemode': 'tozero',
'showgrid': False,
'showline': True,
'showticklabels': True,
'tickmode': 'array',
'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
})
Так что, мне кажется, на графике должны быть правильные метки, так как правильные данные хранятся в текстовом формате. Но это не проявляется.