前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >R tips:使用ggplot2绘制空间坐标图

R tips:使用ggplot2绘制空间坐标图

作者头像
生信菜鸟团
发布2024-12-09 13:04:58
发布2024-12-09 13:04:58
1070
举报
文章被收录于专栏:生信菜鸟团生信菜鸟团

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里面包含细胞的边界坐标。

代码语言:txt
复制
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
 

细胞边界空间图

代码语言:txt
复制
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

 
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可以指定为细胞类型或者基因表达量。下图呈现了深浅两种背景的空间示意图。

上述图示不是特别清楚,放大后如下,可以看到细胞边界坐标可以绘制出完整的单细胞划分后的真实细胞边界:

细胞质心空间图

质心空间图可以有两种图层用于展示:

代码语言:txt
复制
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

 
p_xenium_centroid <-
 
  coords_xenium_sub2 %>% 
 
  ggplot(aes(x = x_centroid, y = y_centroid)) +
 
  geom_point(aes(color = cell_id), show.legend = FALSE) +
 
  coord_fixed(ratio = 1/image_wh_ratio2) +
 
  theme_void() +
 
  ggtitle("geom_point")
 

 
p_xenium_centroid2 <-
 
  coords_xenium_sub2 %>% 
 
  ggplot(aes(x = x_centroid, y = y_centroid)) +
 
  geom_tile(aes(fill = cell_id, height = 10, width = 10), show.legend = FALSE) +
 
  coord_fixed(ratio = 1/image_wh_ratio2) +
 
  theme_void() +
 
  ggtitle("geom_tile")
 

 
p_xenium_centroid | p_xenium_centroid2

geom_point用于绘制空间原位图有一个缺陷,点的大小会随着导出图片的大小而改变,导致出现点太小或者点太大的现象。

另一个选择是使用geom_tile图层,它可以指定点的height和width,height和width的大小和使用的数据有关系,在调试出图时只需要指定好了它们的值,则点的遮挡关系就不会因为导出图片的大小而出现改变。

如下图所示,两个图层的点大小尚未出现难以接受的遮挡或疏远。

但是只要调小一下导出图形的大小,geom_point的点遮挡就非常严重了,而geom_tile依然可以保持不遮挡不疏离的状态。

同样的,将上述图形放大后效果查看绘图细节如下:

本文仅作一种概览的绘图演示,具体的空间图绘制可以基于上述思路进行各种个性化的绘图调整。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 细胞边界空间图
  • 细胞质心空间图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档