seurat
seurat copied to clipboard
Visium cluster annotation
Hi, Seurat team! I wanted to thank you for creating such a powerful tool.
I am analyzing two Visium datasets: one before treatment and one after treatment of the same organ (I do not have a paired scRNA-seq). I am following your tutorial for the Visium analysis and I am trying to annotate the different cell clusters that I identified. In particular, I am interested in B-cells. When I run the FindAllMarkers command for the cell clusters annotation, I am not able to identify all the canonical markers for B-cells. Considering that each spot could represent more than one cell, is it correct to subset the cells based on the expression of the canonical markers for B-cells and annotate them as B-cells?
This is the code that I used:
#Load
A_Treatment <- Load10X_Spatial('~/Desktop/VISIUM/8653/',filename = "filtered_feature_bc_matrix.h5", slice = "tissue_hires_image.png")
#QC
A_Treatment <- PercentageFeatureSet(A_Treatment, "^MT-", col.name = "percent_mito")
VlnPlot(A_Treatment, features = c("nCount_Spatial", "nFeature_Spatial", "percent_mito"), pt.size = 0.1, ncol = 2) + NoLegend()
SpatialFeaturePlot(A_Treatment, features = c("nCount_Spatial", "nFeature_Spatial", "percent_mito"))
A_Treatment <- A_Treatment[, A_Treatment$nFeature_Spatial > 200 & A_Treatment$nCount_Spatial > 200 & A_Treatment$percent_mito < 30]
SpatialFeaturePlot(A_Treatment, features = c("nCount_Spatial", "nFeature_Spatial", "percent_mito"))
#run SCTransform
A_Treatment <- SCTransform(A_Treatment, assay = "Spatial", verbose = FALSE)
#Load
B_Treatment <- Load10X_Spatial('~/Desktop/VISIUM/7085/',filename = "filtered_feature_bc_matrix.h5", slice = "tissue_hires_image.png")
#QC
B_Treatment <- PercentageFeatureSet(B_Treatment, "^MT-", col.name = "percent_mito")
VlnPlot(B_Treatment, features = c("nCount_Spatial", "nFeature_Spatial", "percent_mito"), pt.size = 0.1, ncol = 2) + NoLegend()
SpatialFeaturePlot(B_Treatment, features = c("nCount_Spatial", "nFeature_Spatial", "percent_mito"))
B_Treatment <- B_Treatment[, B_Treatment$nFeature_Spatial > 200 & B_Treatment$nCount_Spatial > 200 & B_Treatment$percent_mito < 30]
SpatialFeaturePlot(B_Treatment, features = c("nCount_Spatial", "nFeature_Spatial", "percent_mito"))
#run SCTransform
B_Treatment <- SCTransform(B_Treatment, assay = "Spatial", verbose = FALSE)
#Create a list
Treatment_list <- list(Object_name1 = A_Treatment,
Object_name2 = B_Treatment)
#Integrate
st.features = SelectIntegrationFeatures(Treatment_list, nfeatures = 3000, verbose = FALSE)
Treatment_list <- PrepSCTIntegration(object.list = Treatment_list, anchor.features = st.features)
combined.anchors <- FindIntegrationAnchors(object.list = Treatment_list, normalization.method = "SCT",
anchor.features = st.features)
Treatment.integrated <- IntegrateData(anchorset = combined.anchors, normalization.method = "SCT")
Treatment.integrated <- RunPCA(Treatment.integrated, verbose = FALSE)
Treatment.integrated <- FindNeighbors(Treatment.integrated, dims = 1:30)
Treatment.integrated <- FindClusters(Treatment.integrated, verbose = FALSE)
Treatment.integrated <- RunUMAP(Treatment.integrated, dims = 1:30)
DimPlot(Treatment.integrated, reduction = "umap", group.by = c("ident", "orig.ident"))
SpatialDimPlot(Treatment.integrated, ncol = 4)
#Identify markers
Treatment.integrated <- PrepSCTFindMarkers(Treatment.integrated)
de_markers <- FindAllMarkers(Treatment.integrated, only.pos = TRUE, assay = "SCT")
#subset B-cells
Treatment_B_cells <- subset(Treatment.integrated, subset = MS4A1 > 0 & CD79A > 0)
Thank you for the answer. Best, Francesco
@FraMont1 Hi, did you find a solution for this?
Thanks!
Hi,
Thanks for your question! This a limitation of spatial data, as you mention, because it's not truly single-cell. You could try techniques like RCTD to deconvolve this spot further (see our spatial vignettes for more details).
In an effort to more promptly address user issues, we’ve started asking users to direct questions like this to our Discussions board, where community members and developers can provide more targeted assistance, as this seems like an active
We’re going to close this issue for now but strongly encourage you to repost your question in the other forum if you need more help!