gpt4 book ai didi

python - 使用 matshow 在行和/或列之间插入间隙

转载 作者:太空宇宙 更新时间:2023-11-03 15:22:56 25 4
gpt4 key购买 nike

我希望在热图中引入特定行/列之间的间隙,类似于 R 的 pheatmap gaps_rowgaps_col 参数。但粗略搜索后发现该功能似乎不可用。我考虑过通过创建具有特定尺寸的不同轴来模拟这种行为,但正确放置它们会很棘手。有没有更简单的方法可以模拟此功能?

例如:

pheatmap gap example

从此question

最佳答案

这是在 matplotlib 中重现上图的代码。

import matplotlib.pyplot as plt
import numpy as np; np.random.seed(0)

a = np.random.poisson(lam=5, size=(10*5, 4*3))

fig, axes = plt.subplots(nrows=5, ncols=4+1, figsize=(6.5,7),
gridspec_kw={"width_ratios":4*[1] + [0.2]})

kw = dict(aspect="auto",vmin=a.min(), vmax= a.max())
for i in range(5):
for j in range(4):
im = axes[i,j].imshow(a[10*i:10*i+10,3*j:3*j+3], **kw )
axes[i,j].tick_params(axis=u'both', which=u'both',length=0)
axes[i,j].set_xticklabels([])
axes[i,j].set_yticklabels([])

ylabels=["gene {:02d}".format(i+1) for i in range(50)]
xlabels=["treatment {:02d}".format(i+1) for i in range(12)]
clabels=["{:02d}".format(i+1) for i in range(5)]
for i in range(5):
axes[i,4].set_facecolor(plt.cm.Set2(i/8.))
axes[i,4].text(0.5,.5, clabels[i], rotation=-90, color="w",
transform=axes[i,4].transAxes,
ha="center", va="center", fontweight="bold", fontsize=9)
axes[i,4].tick_params(axis=u'both', which=u'both',length=0)
axes[i,4].set_xticklabels([])
axes[i,4].set_yticklabels([])
axes[i,0].set_yticks(range(10))
axes[i,0].set_yticklabels(ylabels[i*10:i*10+10], fontsize=7)

for j in range(4):
axes[4,j].set_xticks(range(3))
axes[4,j].set_xticklabels(xlabels[j*3:j*3+3], fontsize=9, rotation=90)
axes[4,4].set_xticks([0.5])
axes[4,4].set_xticklabels(["category"], fontsize=9, rotation=90, fontweight="bold")

cax = fig.add_axes([0.9,0.5,0.03,0.44])
fig.colorbar(im, cax=cax)


plt.subplots_adjust(bottom=0.2, top=0.94, right=0.86)
plt.show()

enter image description here

如果并非所有行或列都具有相同数量的数据点,但如果一行或列上的数据点相同,则此解决方案仍然有效。然后,您需要调整网格规范的 height_ratioswidth_ratios,例如如果第二列沿 x 方向有 5 个数据点而不是 3 个,您将调用

gridspec_kw={"width_ratios":[3,5,3,3,1]}

当然,循环需要进行调整以适应不同的刻度数等。

关于python - 使用 matshow 在行和/或列之间插入间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43384235/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com