如何添加颜色条以在“scanpy.pl.heatmap”图中用“annadata.obs['samples']”标记样本中的单元格?

How to add a color bar to label the cells from which sample with `annadata.obs['samples']` in the `scanpy.pl.heatmap` plot?

谁能帮我告诉我: 如何在 scanpy.pl.heatmap 图 (https://scanpy.readthedocs.io/en/stable/generated/scanpy.pl.heatmap.html) 中添加颜色条来标记样本中带有 annadata.obs['samples'] 的细胞?

非常感谢。

我解决了这个问题,我的解决方案是:

from anndata import AnnData
import numpy as np
import pandas as pd
    
#-- Create a reproducible example
gene_exp = np.array([[0,2,0,1], [1,2,1,3], [6,2,4,1], [5,2,2,1]])
adata = AnnData(gene_exp)
adata.obs['sample'] = ['sample1', 'sample2', 'sample3', 'sample4']
adata.var['gene'] = ['g'+str(i) for i in range(4)]
obs = adata.obs
sample1_idx = obs['sample'] == 'sample1'
sample2_idx = obs['sample'] == 'sample2'
sample3_idx = obs['sample'] == 'sample3'
sample4_idx = obs['sample'] == 'sample4'

data = (np.arange(obs.shape[0])+1)/sum(obs['sample'].value_counts())
import matplotlib.pyplot as plt

plt.rcParams["figure.figsize"] = (20,1)
plt.axis('off')
for a in data[sample1_idx]:
    plt.axvline(x=a, c = 'g',linewidth=2)
for b in data[sample2_idx]:
    plt.axvline(x=b, c = 'lime',linewidth=2)
for c in data[sample3_idx]:
    plt.axvline(x=c, c = 'yellow',linewidth=2)
for d in data[sample4_idx]:
    plt.axvline(x=d, c = 'y',linewidth=2)