cellchat---Interface with other
Interface with other single-cell analysis toolkits
Suoqin Jin
05 January, 2021
- Create a CellChat object from Seurat or SingleCellExperiment object
-
Create a CellChat object from a data matrix extracting from Seurat and Scanpy tools
- Data input required in CellChat
- Extract the CellChat input files from a Seurat V3 object
- Extract the CellChat input files from a Seurat V2 object
- Extract the CellChat input files from a Scanpy object
- Create a CellChat object using data matrix as input
- Add cell information into meta slot of the object
Create a CellChat object from Seurat or SingleCellExperiment object
From CellChat version 0.5.0, USERS can create a new CellChat object from Seurat or SingleCellExperiment object. . If input is a Seurat or SingleCellExperiment object, the meta data in the object will be used by default and USER must provide group.by
to define the cell groups. e.g, group.by = “ident” for the default cell identities in Seurat object.
Please check the examples in the documentation of createCellChat
for details via help(createCellChat)
.
NB: If USERS load previously calculated CellChat object (version < 0.5.0), please update the object via updateCellChat
Converting between single-cell objects (Seurat, SingleCellExperiment and anndata objects)
There are several excellent tools to convert between Seurat objects, SingleCellExperiment objects, and anndata objects. Here are two examples: one is Seurat R package from Satija Lab, and another is zellkonverter R package from Theis Lab.
Create a CellChat object from a data matrix extracting from Seurat and Scanpy tools
Below we shows how to extract the CellChat input files as data matrix from other existing single-cell analysis toolkits, including Seurat and Scanpy.
Data input required in CellChat
CellChat requires two user inputs: one is the gene expression data of cells, and the other is either user assigned cell labels (i.e., label-based mode) or a low-dimensional representation of the single-cell data (i.e., label-free mode). For the latter, CellChat automatically groups cells by building a shared neighbor graph based on the cell-cell distance in the low-dimensional space or the pseudotemporal trajectory space.
Data format
For the gene expression data matrix, genes should be in rows with rownames and cells in columns with colnames. Normalized data is required as input for CellChat analysis, e.g., library-size normalization and then log-transformed with a pseudocount of 1. If user provides count data, we provide a normalizeData
function to account for library size.
For the cell group information, a dataframe with rownames is required as input for CellChat.
Extract the CellChat input files from a Seurat V3 object
The normalized count data and cell group information can be obtained from the Seurat object by
data.input <- GetAssayData(seurat_object, assay = "RNA", slot = "data") # normalized data matrix
labels <- Idents(seurat_object)
meta <- data.frame(group = labels, row.names = names(labels)) # create a dataframe of the cell labels
Extract the CellChat input files from a Seurat V2 object
The normalized count data and cell group information can be obtained from the Seurat object by
data.input <- seurat_object@data # normalized data matrix
labels <- seurat_object@idents
meta <- data.frame(group = labels, row.names = names(labels)) # create a dataframe of the cell labels
Extract the CellChat input files from a Scanpy object
anndata provides a python class that can be used to store single-cell data. This data format is also use for storage in the scanpy package. We first read the data into R using the reticulate package to import the anndata module.
library(reticulate)
ad <- import("anndata", convert = FALSE)
ad_object <- ad$read_h5ad("scanpy_object.h5ad")
# access normalized data matrix
data.input <- t(py_to_r(ad_object$X))
rownames(data.input) <- rownames(py_to_r(ad_object$var))
colnames(data.input) <- rownames(py_to_r(ad_object$obs))
# access meta data
meta.data <- py_to_r(ad_object$obs)
meta <- meta.data
Upon extracting the required CellChat input files, then create a CellChat object and start the analysis.
Create a CellChat object using data matrix as input
cellchat <- createCellChat(object = data.input, meta = meta, group.by = "labels")
Add cell information into meta slot of the object
If cell mata information is not added when creating CellChat object, USERS can also add it later using addMeta
, and set the default cell identities using setIdent
.
cellchat <- addMeta(cellchat, meta = meta, meta.name = "labels")
cellchat <- setIdent(cellchat, ident.use = "labels") # set "labels" as default cell identity
levels(cellchat@idents) # show factor levels of the cell labels