我正在处理生物学数据,并且正在使用Seaborn的热图绘制Pearson R值,以便可以直观地比较22种细胞类型与其他每种细胞类型的表达(制作22x22热图)。
我有两个不同的问题。这是前几天我的情节:
这就是我今天的情节。我非常不确定要解决第一幅图像中的问题时做出了什么更改(除了更改vmin和vmax以及配色方案),但是现在y-tick标签彼此重叠。
The y-ticks are all on top of each other.
这是我生成热图的代码:
def cancerHeatmap(patients, cancer):
x_labels = ['Naive B','Memory B','Plasma','CD8 T','CD4 T Naive','CD4 T MR',
'CD4 T MA','FH T','Tregs','GD T',
'NK resting','NK activated','Monos','Macros M0','Macros M1','Macros M2',
'Dendritic resting','Dendritic activated','Mast resting','Mast activated','Eosinophils','Neutrophils']
pearsonrs = getPearsons(patients, cancer)
axs = sns.heatmap(pearsonrs, cmap = 'RdYlBu', vmin=-0.6, vmax=0.6)
axs.set_yticklabels(x_labels, rotation = 0, fontsize = 10)
axs.set_xticklabels(x_labels, rotation = 90)
axs.xaxis.set_ticks_position('top')
axs.set_xlabel(cancer)
return axs
sns.set_style("whitegrid")
sns.despine()
plt.figure(figsize=(12,70))
plt.suptitle('Subtitle')
for i, cancer in enumerate(cancer_types):
print cancer
plt.subplot((len(cancer_types)/2)+1,2, i+1)
ax = cancerHeatmap(patients, cancer)
plt.tight_layout(rect=[0, 0, 1, 0.97])
plt.savefig('outfile.pdf', dpi=200)
重要的细节是:
“ pearsonrs”是一个函数,可直接将所有值都生成numpy数组,直接进入热图
“ cancer_types”是我将为其生成热图的不同癌症类型的列表
我不知道为什么会这样,尤其是因为我可以使用此代码一次生成一个图,并且轴是完美的:
x_labels = ['Naive B','Memory B','Plasma','CD8 T','CD4 T Naive','CD4 T MR',
'CD4 T MA','FH T','Tregs','GD T',
'NK resting','NK activated','Monos','Macros M0','Macros M1','Macros
M2', 'Dendritic resting','Dendritic activated','Mast resting','Mast activated','Eosinophils','Neutrophils']
axs = sns.heatmap(np.array(pearsonrs), cmap = 'rainbow', vmin=-0.6, vmax=0.6)
axs.invert_yaxis()
axs.set_yticklabels(x_labels, rotation = 0, fontsize = 10)
axs.set_xticklabels(x_labels, rotation = 90, fontsize = 10)
axs.set_xlabel('Cancer')
axs.xaxis.set_ticks_position('top')
非常感谢您的帮助。
编辑: 我在rMBP和同事的rMBP上运行了相同的脚本,我的图形产生了带有堆叠轴标记的图形(图像2),而同事的计算机生成了具有奇数间距的图形(图像1)。
编辑2: 事实证明,每台计算机上的Conda安装都略有不同。将两台计算机都更新到最新的Conda(4.5.9)不会更改任何一台计算机产生的热图。