Skip to content

Sm.pl.cluster plots

Short Description

sm.pl.cluster_plots: A quick meta function that outputs umap plots, heatmap of the expression matrix and ranked makers for each group provided by the user (generally run after using the sm.tl.cluster function)

Function

cluster_plots(adata, group_by, subsample=100000, palette='viridis', use_raw=False, size=None, output_dir=None)

Parameters:

Name Type Description Default
adata

AnnData object loaded into memory or path to AnnData object.

required
group_by

string, required
Name of the categorical column that contains the clustering results.

required
subsample

string, optional
Subsample number of observations.

100000
palette

string, optional
Colors to use for plotting categorical annotation groups.

'viridis'
size

string, optional
Point size of UMAP plot.

None
use_raw

string, optional
Use .raw attribute of adata for coloring the matrixplot expression matrix.

False
output_dir

string, optional
Path to output directory.

None

Returns:

Type Description
plots

UMAP, matrixplot and ranked makers per group.

Examples:

1
    sm.pl.cluster_plots (adata, group_by='spatial_kmeans')
Source code in scimap/plotting/_cluster_plots.py
def cluster_plots (adata, group_by, subsample=100000, palette ='viridis', 
                   use_raw=False,
                   size=None, output_dir=None):
    """
Parameters:
    adata : AnnData object loaded into memory or path to AnnData object.

    group_by : string, required    
        Name of the categorical column that contains the clustering results.

    subsample : string, optional  
        Subsample number of observations.

    palette : string, optional  
        Colors to use for plotting categorical annotation groups.

    size : string, optional  
        Point size of UMAP plot.

    use_raw : string, optional  
        Use `.raw` attribute of adata for coloring the matrixplot expression matrix.

    output_dir : string, optional  
        Path to output directory.

Returns:
    plots :   
        UMAP, matrixplot and ranked makers per group.

Example:
```python
    sm.pl.cluster_plots (adata, group_by='spatial_kmeans')
```
    """

    # Load the data 
    if isinstance(adata, str):
        imid = pathlib.Path(adata).stem
        adata = ad.read(adata)  
    else:
        adata = adata
        imid = ""

    # Subset data if needed
    if subsample is not None:
        if adata.shape[0] > subsample:
            sc.pp.subsample(adata, n_obs=subsample)


    # UMAP
    try:
        sc.pp.neighbors(adata) # Computing the neighborhood graph
        sc.tl.umap(adata)
        fig = sc.pl.umap(adata, color=group_by, palette = palette, size=size, return_fig=True, show=False) # View the clustering
        fig.tight_layout()
        # save figure
        if output_dir is not None:
            output_dir = pathlib.Path(output_dir)
            output_dir.mkdir(exist_ok=True, parents=True)
            #fig.savefig(output_dir / f"{imid}_umap.pdf")
            fig.savefig(pathlib.Path(output_dir) / f"{imid}_umap.pdf")

    except Exception as exc:
        print('UMAP could not be generated')
        print (exc)

    # Matrix plot
    try:
        mat_fig = sc.pl.matrixplot(adata, var_names=adata.var.index, groupby=group_by, use_raw=use_raw,
                         cmap='RdBu_r', dendrogram=True, title = group_by,
                         return_fig=True
                         )
        if output_dir is not None:
            #mat_fig.savefig(output_dir / 'matrixplot.pdf')
            mat_fig.savefig(pathlib.Path(output_dir) / f"{imid}_matrixplot.pdf")

    except Exception as exc:
        print('Heatmap could not be generated')
        print (exc)

    # Marker expression per group
    try:
        sc.tl.rank_genes_groups(adata, group_by, method='t-test')

        # find number of genes in dataset
        if len(adata.var.index) > 20:
            n_genes = 20
        else:
            n_genes = len(adata.var.index)

        if output_dir is not None:
            sc.pl.rank_genes_groups(adata, sharey=False, n_genes=n_genes, fontsize=12, show=False)
            plt.suptitle(group_by, fontsize=20)
            #plt.savefig(output_dir / 'ranked_markers_per_cluster.pdf')
            plt.savefig(pathlib.Path(output_dir) / f"{imid}_ranked_markers_per_cluster.pdf")
        else:
            sc.pl.rank_genes_groups(adata, sharey=False, n_genes=n_genes, fontsize=12)

    except Exception as exc:
        print('Finding differential markers per group cannot be completed')
        print (exc)
Back to top