sc.pp.highly_variable_genes(adata, min_mean=0.0125, max_mean=3, min_disp=0.5, n_top_genes = highly_genes, subset=True)该代码获取高变基因的原理
时间: 2024-04-02 07:31:04 浏览: 142
sc.pp.highly_variable_genes 函数的原理是筛选出高度可变的基因,即表达水平变异较大的基因,以便在后续的分析中仅保留这些基因。其具体实现原理是:
1. 计算每个基因的平均表达水平和方差,以及基因的基因型分布,这些信息都来自于 adata 的数据。
2. 基于 min_mean 和 max_mean 的阈值,筛选出表达水平在这个范围内的基因,这些基因将会用于后续的方差筛选。
3. 基于 min_disp 的阈值,计算每个基因的方差,并筛选出方差较大的基因,这些基因将会用于后续的高变异基因筛选。
4. 基于 n_top_genes 的阈值,选择方差最大的前 n_top_genes 个基因作为高变异基因。
需要注意的是,这个函数会对 adata 的数据进行修改,将筛选出的高变异基因保存在 adata.var 属性中。此外,subset 参数可以选择是否仅对adata中的子集进行计算,以提高计算效率。
相关问题
sc.pp.highly_variable_genes()中min_mean、max_mean是怎么选择的
在 sc.pp.highly_variable_genes() 中,min_mean 和 max_mean 是用于确定高变异基因的表达水平范围的参数。一般来说,这些参数的选择是经验性的,并且需要结合实际数据进行调整。
min_mean 和 max_mean 的选择一般基于两个考虑因素:一是基因表达水平的分布情况,二是想要筛选出的高变异基因数量。对于大多数的基因表达数据,基因表达水平的分布通常呈现出长尾分布,这意味着只有少数基因的表达水平较高,而大多数基因的表达水平较低。因此,min_mean 和 max_mean 的选择应该结合这个情况来考虑。比如,可以选择表达水平在中位数左右的基因作为高变异基因,或者选择表达水平在前 25% 至前 75% 之间的基因作为高变异基因。
另外,选择 min_mean 和 max_mean 还需要考虑想要筛选出的高变异基因数量。如果想要筛选出的高变异基因数量较多,那么 min_mean 和 max_mean 可以设置得较宽;如果想要筛选出的高变异基因数量较少,那么 min_mean 和 max_mean 可以设置得较窄。需要注意的是,min_mean 和 max_mean 的选择应该根据具体的实验设计和研究问题进行调整。
fig, axs = plt.subplots(1, 4, figsize=(15, 4)) sns.displot(adata.obs["total_counts"], kde=False, ax=axs[0]) sns.displot(adata.obs["total_counts"][adata.obs["total_counts"] < 10000], kde=False, bins=40, ax=axs[1]) sns.displot(adata.obs["n_genes_by_counts"], kde=False, bins=60, ax=axs[2]) sns.displot(adata.obs["n_genes_by_counts"][adata.obs["n_genes_by_counts"] < 4000], kde=False, bins=60, ax=axs[3]) plt.show()完善这段代码使图像在一个画布上生成
可以使用`plt.subplots()`函数来创建一个包含所有子图的画布。修改代码如下:
```python
fig, axs = plt.subplots(1, 4, figsize=(15, 4))
sns.displot(adata.obs["total_counts"], kde=False, ax=axs[0])
sns.displot(adata.obs["total_counts"][adata.obs["total_counts"] < 10000], kde=False, bins=40, ax=axs[1])
sns.displot(adata.obs["n_genes_by_counts"], kde=False, bins=60, ax=axs[2])
sns.displot(adata.obs["n_genes_by_counts"][adata.obs["n_genes_by_counts"] < 4000], kde=False, bins=60, ax=axs[3])
# 移除原始的plt.show()
plt.tight_layout() # 调整子图之间的间距
plt.show()
```
这样修改后,所有的子图将在一个画布上生成,并且通过`plt.tight_layout()`函数可以调整子图之间的间距,以确保它们不会重叠。
阅读全文