Xenium、Visium、VisiumHD、CellDive、Akoya等空间组学数据是包含细胞的坐标信息的,这些信息可以用于绘制空间原位图。
空间数据提供的位置信息一般分为两种:细胞的质心和细胞的边界,以Xenium数据为例,这两种细胞坐标信息它都有包含。
10X官方提供的xenium数据在https://www.10xgenomics.com/products/xenium-in-situ/preview-dataset-human-breast
Xenium Output Bundle下载链接见https://cf.10xgenomics.com/samples/xenium/1.0.1/XeniumFFPEHumanBreastCancerRep1/XeniumFFPEHumanBreastCancerRep1_outs.zip
解压后的文件列表如下,其中:
cells.csv或者cells.parquet里面包含细胞质心坐标,而cellboundaries.csv.gz或者cellboundaries.parquet里面包含细胞的边界坐标。
analysis
analysis.zarr.zip
analysis_summary.html
aux_outputs
cell_boundaries.csv.gz
cell_boundaries.parquet
cell_feature_matrix
cell_feature_matrix.h5
cell_feature_matrix.zarr.zip
cells.csv
cells.parquet
cells.zarr.zip
experiment.xenium
gene_panel.json
metrics_summary.csv
morphology
.ome.tif
morphology_focus
nucleus_boundaries.csv.gz
nucleus_boundaries.parquet
transcripts.csv.gz
transcripts.parquet
transcripts.zarr.zip
细胞边界空间图
library(tidyverse)
library(patchwork)
coords_xenium arrow::read_parquet('cell_boundaries.parquet')
range(coords_xenium$vertex_x)
range(coords_xenium$vertex_y)
# subset cells
coords_xenium_sub
coords_xenium
%>%
dplyr::filter(
vertex_x > 3000,
vertex_x < 4000,
vertex_y > 2000,
vertex_y < 4000
)
# used to fixed coords
image_wh_ratio diff(range(coords_xenium$vertex_x))/diff(range(coords_xenium$vertex_y))
p_xenium_boundary
coords_xenium_sub %>%
ggplot(aes(x = vertex_x, y = vertex_y)) +
geom_polygon(aes(group
= cell_id, fill = cell_id), show.legend = FALSE) +
coord_fixed(ratio = 1/image_wh_ratio) +
theme_void()
# black background
p_xenium_boundary2
p_xenium_boundary +
theme(panel.background = element_rect(fill = "black"))
p_xenium_boundary | p_xenium_boundary2
使用geom_polygon绘制细胞边界空间图,指定group为cell_id即可,fill可以指定为细胞类型或者基因表达量。下图呈现了深浅两种背景的空间示意图。
上述图示不是特别清楚,放大后如下,可以看到细胞边界坐标可以绘制出完整的单细胞划分后的真实细胞边界:
细胞质心空间图
质心空间图可以有两种图层用于展示:
coords_xenium2 arrow::read_parquet('cells.parquet')
range(coords_xenium2$x_centroid)
range(coords_xenium2$y_centroid)
coords_xenium_sub2
coords_xenium2 %>%
dplyr::filter(
x_centroid > 3000,
x_centroid < 4000,
y_centroid > 2000,
y_centroid < 4000
)
image_wh_ratio2 diff(range(coords_xenium2$x_centroid))/diff(range(coords_xenium2$y_centroid))