Visualization of 3k PBMC reference
1. Import dependencies
We need to import the classes and functions that we will be using from the corresponding packages.
[ ]:
import os
from os.path import join, isfile, isdir
from urllib.request import urlretrieve
from anndata import read_h5ad
import scanpy as sc
from vitessce import (
VitessceConfig,
Component as cm,
CoordinationType as ct,
AnnDataWrapper,
)
from vitessce.data_utils import (
optimize_adata,
VAR_CHUNK_SIZE,
)
2. Download the dataset
Download pbmc3k_final.h5ad
from https://seurat.nygenome.org/pbmc3k_final.h5ad
[ ]:
adata_filepath = join("data", "pbmc3k_final.h5ad")
if not isfile(adata_filepath):
os.makedirs("data", exist_ok=True)
urlretrieve('https://seurat.nygenome.org/pbmc3k_final.h5ad', adata_filepath)
3. Load the dataset
Load the dataset using AnnData’s read_h5ad
function.
[ ]:
adata = read_h5ad(adata_filepath)
3.1 Save the AnnData object to Zarr
[ ]:
zarr_filepath = join("data", "pbmc3k_final.zarr")
if not isdir(zarr_filepath):
adata = optimize_adata(
adata,
obs_cols=["leiden"],
obsm_keys=["X_umap", "X_pca"],
optimize_X=True,
)
adata.write_zarr(zarr_filepath, chunks=[adata.shape[0], VAR_CHUNK_SIZE])
4. Create a Vitessce view config
Define the data and views you would like to include in the widget.
[ ]:
vc = VitessceConfig(schema_version="1.0.15", name='PBMC Reference')
dataset = vc.add_dataset(name='PBMC 3k').add_object(AnnDataWrapper(
adata_path=zarr_filepath,
obs_set_paths=["obs/leiden"],
obs_set_names=["Leiden"],
obs_embedding_paths=["obsm/X_umap", "obsm/X_pca"],
obs_embedding_names=["UMAP", "PCA"],
obs_feature_matrix_path="X"
))
umap = vc.add_view(cm.SCATTERPLOT, dataset=dataset, mapping="UMAP")
pca = vc.add_view(cm.SCATTERPLOT, dataset=dataset, mapping="PCA")
cell_sets = vc.add_view(cm.OBS_SETS, dataset=dataset)
genes = vc.add_view(cm.FEATURE_LIST, dataset=dataset)
heatmap = vc.add_view(cm.HEATMAP, dataset=dataset)
vc.layout((umap / pca) | ((cell_sets | genes) / heatmap));
5. Create the Vitessce widget
A widget can be created with the .widget()
method on the config instance. Here, the proxy=True
parameter allows this widget to be used in a cloud notebook environment, such as Binder.
[ ]:
vw = vc.widget()
vw