在进行个性化探索的时候尝需要提取数据进行分组探索,以下就是一个简单流程。
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
import scanpy as sc
import numpy as np
import anndata as ad
import pooch
import os
# 确定位置
os.getcwd()
# 读取数据
adata = sc.read_h5ad('./scRNA_V5.h5ad')
adata.obs
# 展示一下该数据集
# PCA
sc.tl.pca(adata)
# Harmony 整合
sce.pp.harmony_integrate(adata, 'orig.ident') # 或 'sample'
# 构建邻接图
sc.pp.neighbors(adata, use_rep='X_pca_harmony')
# 然后再运行 UMAP
sc.tl.umap(adata)
sc.pl.umap(
adata, # AnnData 对象
color="celltype", # 按 celltype 分组上色
size=0.8, # 点大小,类似 pt.size
legend_loc='right margin', # 在图上显示标签,等价于 label = TRUE
ncols=2, # 控制子图排列列数
title=None, # 可选:不显示默认标题
show =False
)
adata.obs["celltype"].unique()
Tgroup = ["sample1", "sample3", "sample5"]
# np.where有点像ifelse
adata.obs['type'] = np.where(adata.obs['orig.ident'].isin(Tgroup), 'Tumor', 'Normal')
adata.obs["type"].value_counts()
# type
# Tumor 2048
# Normal 1983
# Name: count, dtype: int64
# 获取 Tumor 和 Control 的索引
tumor_indices = adata.obs.index[adata.obs["type"] == "Tumor"]
control_indices = adata.obs.index[adata.obs["type"] == "Normal"]
# 随机选择目标数量个细胞
np.random.seed(42) # 设置随机种子,以便结果可重复
selected_tumor_indices = np.random.choice(tumor_indices, size=1000, replace=False)
selected_control_indices = np.random.choice(control_indices, size=1000, replace=False)
#从 Tumor 和 Normal 各自中随机选取 1000 个细胞。
#replace=False 表示不放回抽样。
# 生成Tumor/Normal的子集
tumor_subset_adata = adata[selected_tumor_indices].copy()
control_subset_adata = adata[selected_control_indices].copy()
# 合并 Tumor 和 Control 子集
combined_adata = tumor_subset_adata.concatenate(control_subset_adata)
# 3. 进行 Harmony 处理
sce.pp.harmony_integrate(combined_adata, 'orig.ident')
# 进行邻接图构建和 UMAP 降维
sc.pp.neighbors(combined_adata, n_neighbors=20, n_pcs=15, use_rep='X_pca_harmony')
sc.tl.umap(combined_adata)
# 4. 绘制 UMAP 图,两张图分别显示 Tumor 和 Control
fig, axes = plt.subplots(1, 2, figsize=(12, 6))
# 选择合并后的数据并绘制 Tumor 的 UMAP
tumor_mask = combined_adata.obs['type'] == 'Tumor'
sc.pl.umap(combined_adata[tumor_mask], ax=axes[0], show=False, title='Tumor UMAP', color='celltype', legend_loc=None)
# 选择合并后的数据并绘制 Control 的 UMAP
control_mask = combined_adata.obs['type'] == 'Normal'
sc.pl.umap(combined_adata[control_mask], ax=axes[1], show=False, title='Normal UMAP', color='celltype')
# 遍历所有文本对象,调节字体大小
for ax in fig.axes:
# 调整 x 轴标签
ax.tick_params(axis='x', labelsize=12, rotation=45) # X轴字体大小+旋转
# 调整 y 轴标签
ax.tick_params(axis='y', labelsize=12) # Y轴字体大小
# 如果需要,可以加轴标题字体大小
ax.xaxis.label.set_size(14)
ax.yaxis.label.set_size(14)
# 可以设置更具体的标题字体
ax.title.set_fontsize(16)
plt.savefig("umapPlot_sub.pdf",bbox_inches='tight',dpi=300)
plt.show()
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。