Skip to content

Support for spatial transcriptomics (Visium) #337

@lgaspardboulinc31

Description

@lgaspardboulinc31

Dear developers,

Thanks for the amazing tool!
I was wondering If you were planning to add a module for spatial transcriptomics data as most packages have difficulties for conversion.

I leave here a snippet of code I have written to do so:

# Prepare the custom conversion
  ## Obs - Metadata
  obs_mapping <- colnames([email protected])
  names(obs_mapping) <- colnames([email protected])
  print(length(obs_mapping))
  print(paste0("Nrow metadata:", nrow([email protected])))
  
  ## var mapping - Seurat does not often compute var statistics like in sc.pp
  
  ## uns mapping - image identidities
  ### Image data
  images = list(lowres=spatial_obj@images$tissue_lowres_image.png@image)
  
  ### Scale factors
  scalefactors_seurat <- spatial_obj@[email protected]
  scalefactors = list(fiducial_diameter_fullres=scalefactors_seurat$fiducial, spot_diameter_fullres=scalefactors_seurat$spot,
                      tissue_hires_scalef=scalefactors_seurat$hires, tissue_lowres_scalef=scalefactors_seurat$lowres)
  ### Metadata
  metadata = list(chemistry_description = chemistry_description, software_version = software_version)
  spatial_list <- list(list(images=images,metadata=metadata, scalefactors=scalefactors))
  names(spatial_list) <- sample_name
  
  spatial_obj@misc[["spatial"]] <-spatial_list
  
  # Obsm mapping - Coordinates
  obsm_spatial <- as.matrix(spatial_obj@images$tissue_lowres_image.png@boundaries$centroids@coords[,c("y","x")])
  colnames(obsm_spatial) <- NULL
  rownames(obsm_spatial) <- colnames(spatial_obj)
  print(paste0("Obsm dim:", dim(obsm_spatial)))
  ## Add it to dim reduction
  spatial_obj[["spatial_adata"]] <- CreateDimReducObject(embeddings = obsm_spatial, assay="Spatial",key="spatialadata_")
  
  
  print(paste0("Count dim",dim(spatial_obj@assays$Spatial$counts)))
  print(names(spatial_obj@assays$Spatial@layers))
  print(paste0("Objet dim:",dim(spatial_obj)))
  # Trying to use custom annotation
  adata <- as_AnnData(
    spatial_obj,
    assay_name = "Spatial",#spatial assay
    x_mapping = "counts",
    layers_mapping = c(counts="counts"),
    obs_mapping = obs_mapping,
    var_mapping = TRUE,
    obsm_mapping = list(X_pca = "pca", X_umap = "umap", spatial = "spatial_adata"),
    obsp_mapping = TRUE,
    uns_mapping = c("spatial")
  )
  print(paste0("Anndata dim ", dim(adata$X)))

However, I had an error when writing this object. But weirdly, the object was still written and seems functional in python environment as I was able to access .X and plot features & metadata.

> write_h5ad(adata,paste0(save_path, sample_name,".h5ad"), mode="a")
Error:
! Unexpected shape for X
ℹ Expected [36601], got [642, 36601]

> rlang::last_trace(drop = FALSE)
<error/rlang_error>
Error:
! Unexpected shape for X
ℹ Expected [36601], got [642, 36601]
---
Backtrace:
    ▆
 1. ├─anndataR::write_h5ad(...)
 2. │ └─object$as_HDF5AnnData(path, compression = compression, mode = mode)
 3. │   └─anndataR:::as_HDF5AnnData(...)
 4. │     └─HDF5AnnData$new(...)
 5. │       └─anndataR (local) initialize(...)
 6. └─anndataR (local) `<fn>`(base::quote(`<dgRMatrx[,36601]>`))
 7.   └─private$.validate_aligned_array(...)
 8.     └─cli::cli_abort(...)
 9.       └─rlang::abort(...)

Have you already experimented such issue? Do you see any way I could change my code?

Thanks a lot!
Best,
Lucie

Sub-issues

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions