1
我希望能引入类似于R的pheatmapgaps_row
或gaps_col
参数的热图中的特定行/列之间的间隙。但是,粗略搜索后,此功能似乎不可用。我曾考虑通过创建具有特定大小的不同轴来模拟此行为,但正确地确定其位置将会非常棘手。有没有更简单的方法来模拟此功能?使用matshow插入行和/或列之间的间隙
例如:
从这question
我希望能引入类似于R的pheatmapgaps_row
或gaps_col
参数的热图中的特定行/列之间的间隙。但是,粗略搜索后,此功能似乎不可用。我曾考虑通过创建具有特定大小的不同轴来模拟此行为,但正确地确定其位置将会非常棘手。有没有更简单的方法来模拟此功能?使用matshow插入行和/或列之间的间隙
例如:
从这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()
如果不是所有的行或列中具有相同数目的数据点,但如果数据点沿着一行或一列相同,该解决方案将仍然正常工作。然后您需要调整gridspec的height_ratios
或width_ratios
,例如,如果第二列具有沿x方向,而不是3 5个数据点,你会打电话
gridspec_kw={"width_ratios":[3,5,3,3,1]}
OFG过程中的循环将需要适应占不同数量的蜱等
这是伟大的感谢。如果列或行的大小不相等,这是否仍然有效,同时保留每个数据点的大小? – GWW
如果我理解正确,你想拥有一行中有15个数据点而不是10个?只要完整的行具有相同的点数,那就行得通了。相同的列。我用一段关于此的更新了答案。 – ImportanceOfBeingErnest
这真的很有帮助谢谢。我不知道gridspec的宽高比。我一直在使用'add_axes'手动添加每个轴来绘制这样的图 – GWW