有没有办法在Python中显示/保存使用seaborn.clustermap创建的树状图和热图?

2024-09-27 00:18:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用seaborn.clustermap创建有序的热图。我希望能够分别保存树状图和热图。有没有办法把这三者分开

我创建热图/树状图组合的代码如下

sns.clustermap(datadissimilarity, method='average', figsize=(40,40))

Tags: 代码seabornmethod热图average树状sns有序
2条回答

^{}返回一个“clustergrid”,其中包含作为“轴”的子图:g.ax_col_dendrogramg.ax_row_dendrogram, g.ax\u热图, g.ax\u颜色, g.ax\u行颜色andg.ax u cbar`

可以使用这些轴计算所需区域的边界框。另请参见Save a subplot in matplotlib的第二个答案,关于如何组合区域以选择感兴趣的确切区域

import seaborn as sns; sns.set_theme(color_codes=True)

iris = sns.load_dataset("iris")
species = iris.pop("species")
g = sns.clustermap(iris)

fig = g.fig
for ax, filename in zip([g.ax_col_dendrogram, g.ax_row_dendrogram, g.ax_heatmap],
                        ['col_dendrogram', 'row_dendrogram', 'heatmap']):
    extent = ax.get_tightbbox(fig.canvas.renderer).transformed(fig.dpi_scale_trans.inverted())
    fig.savefig(f'{filename}.png', bbox_inches=extent)

在对g.savefig()的调用中,只能保存图using ^{}的一部分

树状图和热图位于单独的Axes对象中,您可以使用g.ax_row_dendrogramg.ax_col_dendrogramg.ax_heatmap访问这些对象。您可以使用体形变换获取它们的位置(以英寸为单位),以便传递到bbox_inches

iris = sns.load_dataset("iris")
species = iris.pop("species")
g = sns.clustermap(iris)

for ax,name in zip([g.ax_heatmap, g.ax_col_dendrogram, g.ax_row_dendrogram],
                   ['heatmap.png','col_dendrogram.png','row_dendrogram.png']):
    bbox = ax.get_window_extent()
    inches = g.fig.dpi_scale_trans.inverted().transform_bbox(bbox)
    g.savefig(name, bbox_inches=inches)

相关问题 更多 >

    热门问题