Python Seaborn clustermap仅显示高z值基因的轴标签

Python Seaborn clustermap仅显示高z值基因的轴标签,python,seaborn,Python,Seaborn,我正在为包含1000-15000个基因的表达矩阵生成热图,我只对高表达基因的子集感兴趣。是否有一种方法可以仅显示具有高z值的标签 现在我只是为x轴设置了一个非常小的字体,但这不是一个可伸缩的解决方案 示例代码: 将numpy导入为np 作为pd进口熊猫 作为sns导入seaborn;sns.set(颜色代码=真) 从functools导入reduce df=pd.DataFrame(np.random.randn(200,4),列=['cell_1'、'cell_2'、'cell_3'、'cel

我正在为包含1000-15000个基因的表达矩阵生成热图,我只对高表达基因的子集感兴趣。是否有一种方法可以仅显示具有高z值的标签

现在我只是为x轴设置了一个非常小的字体,但这不是一个可伸缩的解决方案

示例代码:

将numpy导入为np
作为pd进口熊猫
作为sns导入seaborn;sns.set(颜色代码=真)
从functools导入reduce
df=pd.DataFrame(np.random.randn(200,4),列=['cell_1'、'cell_2'、'cell_3'、'cell_4',])
idx=([f'基因{i}'代表范围(0200)])
df['gene']=idx
df.set_索引('gene',in place=True)
g=sns.clustermap(df.transpose(),method='average',metric='correlation',z_score=0,figsize=(15,15),xticklabels=True)
g、 ax_heatmap.set_xticklabels(g.ax_heatmap.get_xmajorticklabels(),fontsize=5)

我想得到一个更可读的x轴,其中只显示具有高z值的基因标签


谢谢大家!

这里是一个快速而肮脏的尝试。 你可以让它更干净或者性能更好,但是你明白了

最好看一看,它解释了如何对热图进行自定义注释,可能很有用

<>你也可以考虑先在你的数据文件上工作,然后只绘制相关的数据(数据文件“过滤”)

结果:

代码:

seaborn(场景后面的matplotlib)具有用于访问x、y标签的基本体,您可以通过过滤显示的记号或记号标签来修改生成的绘图(在实际绘制之前),具体取决于关联的值?
import numpy as np
import pandas as pd
import seaborn as sns; sns.set(color_codes=True)
from functools import reduce

total_genes = 50
df = pd.DataFrame(np.random.randn(total_genes, 4), columns=['cell_1', 'cell_2', 'cell_3', 'cell_4',])

idx=([f'Gene {i}' for i in range(0, total_genes)])

df['gene'] = idx
df.set_index('gene', inplace=True)
transposed = df.transpose()
# print(transposed)
g = sns.clustermap(transposed, method='average', metric='correlation', z_score=0, figsize=(15,15), xticklabels=True)
g.ax_heatmap.set_xticklabels(g.ax_heatmap.get_xmajorticklabels())#, fontsize = 5)

# tmp = g.ax_heatmap.get_xaxis()

threshold = 1.2
x_labels_ticks = g.ax_heatmap.get_xticklabels()

total_genes_above_threshold = 0
for i, xtickdata in enumerate(x_labels_ticks):
    gene = xtickdata._text
    if transposed[gene].max() >= threshold:
        # print("gene {} has at least one value > {}".format(xtickdata, threshold))
        # print(transposed[gene])
        # print("#########")
        total_genes_above_threshold = total_genes_above_threshold + 1
    else:
        xtickdata._text = ''

print("total_genes_above_threshold {}".format(total_genes_above_threshold))

# re set the tick labels with the modified list
g.ax_heatmap.set_xticklabels(x_labels_ticks)