ヒートマップの描画ははじめてseabornを使ってみたのだが、噂通り細かい調節は難しい。
今回系統樹の枝の長さを入れたかったのだが、結局方法にたどり着けなかったので、系統樹の部分だけmatplotlibで描いてみる。
枝が自動で色がついていたり、まだ改良の余地はあるかな。
@app.route('/cluster', methods=['GET', 'POST']) def cluster_index(): user = g.user.name form=StatForm() dir = "./user/" + user + "/cluster" if os.path.exists(dir): shutil.rmtree(dir) if not os.path.exists(dir): os.makedirs(dir) input = dir + "/input.txt" output = dir + "/results.txt" if request.method == 'POST': if 'file' not in request.files: flash('No file part') return redirect(request.url) file = request.files['file'] if file.filename == '': flash('No data input') return redirect(request.url) if file and allowed_file(file.filename): file.save(input) if os.path.exists(input): if form.fig_x.data: fig_x=form.fig_x.data if form.fig_y.data: fig_y=form.fig_y.data if form.fig_dpi.data: fig_dpi=form.fig_dpi.data if form.c_method.data: c_method=form.c_method.data if form.c_dist.data: c_dist=form.c_dist.data if form.font_size.data: f_size=form.font_size.data df = pd.read_csv(input, index_col=0) df_t = df.T header = df.columns from scipy.spatial.distance import pdist linkage_result = linkage(df_t, method=c_method, metric=c_dist) plt.figure(num=None, figsize=(fig_x,fig_y), dpi=fig_dpi, facecolor='w', edgecolor='k') dendrogram(linkage_result, leaf_font_size=f_size, labels=header) cluster_fig = dir + "/cluster_" + str(time.time()) + ".png" plt.savefig(cluster_fig) img_url = "../../static/" + cluster_fig return render_template('/tools/cluster.html', form=form, img_url=img_url) return render_template('/tools/cluster.html', form=form)