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



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

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

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

sns.clustermap返回一个"clustergrid",其中包含作为"axes"的子地块:g.ax_col_dendrogramg.ax_row_dendrogram,g.ax_heatmap,g.ax_col_colors,g.ax_row_colorsandg.ax_cbar`。

可以使用这些轴来计算所需区域的边界框。另请参阅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()的调用中,使用bbox_inches=只能保存图形的一部分。

树状图和热图位于单独的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)

最新更新