在 seaborn clustermap 中如何特定改变热力图的大小?

10
我正在使用Seaborn制作一个聚类热图,如下所示。
import numpy as np
import seaborn as sns
np.random.seed(2)
data = np.random.randn(100, 10)
sns.clustermap(data)

但行之间被压缩了:

图片描述

但是如果我向clustermap函数传递一个大小,那么它看起来很糟糕。

图片描述

是否有一种方法只增加热图部分的大小?这样可以读取行名称,但不会拉伸聚类部分。


没有简单的方法,但是您总是可以在绘制后操纵 matplotlib 对象以将它们放置在所需位置。 - mwaskom
我应该操作什么?我知道可以使用ax_heatmap参数访问底层热图轴,但我不知道应该更改的matplotlib属性的名称。我的Google-fu也失败了。 - tlnagy
1
我认为你会想尝试使用ax_heatmap.set_position方法。当然,你还需要改变树状图轴。 - mwaskom
2个回答

10

正如@mwaskom所评论的那样,我能够使用ax_heatmap.set_positionget_position函数来实现正确的结果。

import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

np.random.seed(2)
data = np.random.randn(100, 10)
cm = sns.clustermap(data)
hm = cm.ax_heatmap.get_position()
plt.setp(cm.ax_heatmap.yaxis.get_majorticklabels(), fontsize=6)
cm.ax_heatmap.set_position([hm.x0, hm.y0, hm.width*0.25, hm.height])
col = cm.ax_col_dendrogram.get_position()
cm.ax_col_dendrogram.set_position([col.x0, col.y0, col.width*0.25, col.height*0.5])

这里输入图片描述


1

可以通过将树状图比率的值传递到kw参数中来实现。

import numpy as np
import seaborn as sns
np.random.seed(2)
data = np.random.randn(100, 10)
sns.clustermap(data,figsize=(12,30),dendrogram_ratio=0.02,cmap='RdBu')

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接