作者,Evil Genius
什么是细胞“网络”?细胞在空间位置上不是随机出现的,细胞在空间上的定位受到了周围环境以及自身状态的影响,而这种影响的结果,就是每种细胞类型在空间上形成了具有区域偏好性的细胞“网络”。为了系统的确定特定细胞类型的细胞区域“网络”,计算了每种细胞类别中的空间位置彼此相邻的倾向,这里我们称之为同型细胞“网络”。
同型细胞“网络”是为了确定单一细胞类型在空间上的分布特点,多条件进行比较会发现明显的差异和生物学变化。
为了评估每一类(这里就是细胞类型)中spot的空间聚类程度,针对空间转录组构建空间细胞网络,计算网络中每个点 i 的spot degree--- ki(即直接相邻spot的数量,对于 Visium 对应的最大spot degree为 6),文章展示图如下:
意思就是一个spot含有细胞类型A,那其周围的6个spot如果都含有A,那么该spot 为等级6,5个spot含有A则是等级5,以此类推。
随便找了个数据试了一下,拿到下面的效果
当然了,用HE图片的效果比荧光效果好的多,当然,这个图的绘制也是相当复杂。
好看的图片需要以下几个要素:
1、主题:一幅好照片必须有一个鲜明的主题,可以是表现一件事、一个人,也可以表现组照作品故事中的某一个细节。主题明确的作品,要表述的内容让观众一目了然,也就是说,能够使观众很容易从照片中看明白作者的意图。
2、简洁清晰:想必大家都知道这么一句话:绘画是加法,摄影是减法。也就是说,摄影的画面越简洁越好。简洁不等于简单,也不是指画面中被摄内容的多少,而是指画面与主题无关的视觉元素越少越好。
3、颜色搭配:颜色搭配也是一门很深的学问
我们就来实现一下这个方法,首先我们要构建空间网络,寻找每个spot周围6个spot,随后计算细胞等级。
library(Seurat)
library(dplyr)
cortex_sp = readRDS(spatial.rds)
decon_mtrx = t(cortex_sp@assays$predictions@data)
cell_types_all <- colnames(decon_mtrx)[which(colnames(decon_mtrx) != "max")]
decon_df <- decon_mtrx %>%
data.frame(check.names = F) %>%
tibble::rownames_to_column("barcodes")
#decon_df$barcodes = rownames(tmp)
cortex_sp@meta.data <- cortex_sp@meta.data %>%
tibble::rownames_to_column("barcodes") %>%
dplyr::left_join(decon_df, by = "barcodes") %>%
tibble::column_to_rownames("barcodes")
###plot dot
slice <- names(cortex_sp@images)[1]
metadata_ds <- data.frame(cortex_sp@meta.data)
colnames(metadata_ds) <- colnames(cortex_sp@meta.data)
cell_types_interest <- cell_types_all
metadata_ds <- metadata_ds %>% tibble::rownames_to_column("barcodeID") %>%
dplyr::mutate(rsum = base::rowSums(.[, cell_types_interest,
drop = FALSE])) %>% dplyr::filter(rsum != 0) %>%
dplyr::select("barcodeID") %>% dplyr::left_join(metadata_ds %>%
tibble::rownames_to_column("barcodeID"), by = "barcodeID") %>%
tibble::column_to_rownames("barcodeID")
spatial_coord <- data.frame(cortex_sp@images[[slice]]@coordinates) %>%
tibble::rownames_to_column("barcodeID") %>% dplyr::mutate(imagerow_scaled = imagerow *
cortex_sp@images[[slice]]@scale.factors$lowres, imagecol_scaled = imagecol *
cortex_sp@images[[slice]]@scale.factors$lowres) %>% dplyr::inner_join(metadata_ds %>%
tibble::rownames_to_column("barcodeID"), by = "barcodeID")
###添加坐标信息
st.object = cortex_sp
st.object$pixel_x = spatial_coord$imagerow_scaled
st.object$pixel_y = spatial_coord$imagecol_scaled
st.object$sample = st.object$orig.ident
xys = setNames(st.object@meta.data[, c("pixel_x", "pixel_y", "sample")], c("x", "y", "sample"))
platforms = 'Visium'
spotnames <- rownames(xys)
library(dplyr)
names(spotnames) <- c(1:nrow(xys)) %>% paste0()
# Get spot distances
sdist = 200
###10X空间转录组临近的6个spot
nNeighbours = 6
maxdist = 200
网友评论