Skip to contents

Quick start guide

See vignette("authentication") for instructions on creating your personal API token for accessing data. To begin using pluto, load the package and log in with your personal API token:

library(pluto)
pluto_login("<YOUR API TOKEN>")

Accessing Seurat objects from Pluto

Single cell RNA-seq in Pluto creates two Seurat objects: a raw Seurat object, which is created at the beginning of the single cell RNA-seq preprocessing workflow and has not been filtered, normalized, integrated, clustered, etc.; and a final Seurat object, which is the final, processed Seurat object that results from completing and accepting a preprocess workflow. Both Seurat objects are accessible for external scRNA-seq analysis via the pluto package.

Download Seurat object

To download a Seurat object, provide the experiment ID, Seurat type ("raw" or "final") to the pluto_download_seurat_object() function (you can also provide an optional desired destination file path by setting dest_filename):

experiment_id <- "PLX037839"
seurat_type <- "raw"
pluto_download_seurat_object(experiment_id, seurat_type)

Read Seurat object

To read a Seurat object directly into your R script, provide the experiment ID and Seurat type ("raw" or "final") to the pluto_read_seurat_object() function:

experiment_id <- "PLX037839"
seurat_type <- "raw"
so <- pluto_read_seurat_object(experiment_id, seurat_type)

It is important to note that the pluto_read_seurat_object() function returns different objects depending on the Seurat type specified. If the Seurat type is specified as "raw", a Seurat object will be returned. If the Seurat type is specified as "final", a list is returned containing the final Seurat object, obj, with custom cluster annotations added to the Seurat meta.data and custom color palettes corresponding to the cluster annotation sets in-app, colors.

experiment_id <- "PLX037839"
seurat_type <- "final"
final_obj <- pluto_read_seurat_object(experiment_id, seurat_type)

# To access the Seurat object
so <- final_obj$obj

# To access the custom color palettes
custom_palettes <- final_obj$colors

The Seurat object

The Seurat object, developed by the Satija lab, is a representation of single-cell expression data for R. The object serves as a container that contains both data (like the count matrix) and analysis (like PCA, or clustering results) for a single cell dataset. At the top level, the Seurat object serves as a collection of Assay and DimReduc objects, representing expression data and dimensionality reductions of the expression data, respectively. Seurat objects also store additional metadata, both at the cell and feature level. Click here for more information.

To access your Seurat object assay(s):

so@assays

To access your Seurat object reductions:

so@reductions

To access your Seurat object meta.data:

so@meta.data

# Or, to just display the first n rows of meta.data:
head(so@meta.data, n = 10)

The column names in your meta.data will correspond to the variables and latent variables you see in the Pluto app. You will also see additional columns that were added during the preprocess workflow, mostly related to QC. If you are reading in a final Seurat object, you will see columns that correspond to your cluster annotation sets.

To get a list of available meta.data columns in your Seurat object:

colnames(so@meta.data)

Visualization using the Seurat package

Once a Seurat object has been downloaded from Pluto, we can use a variety of base plotting functions from the Seurat package. We can further modify and customize these plots using ggplot2.

Dimensional reduction plot

Using the Seurat DimPlot() function, make a scatter plot in UMAP space grouping cells by custom annotation set “Default cluster - res. 1.0” (here, we can use one of our custom color palettes that we defined in the Pluto app):

DimPlot(so, # the Seurat object
        reduction = "umap", # could also be "tsne" or "pca"
        group.by = "default_clusters_res_0_1", # custom annotation set
        cols = custom_palettes$default_clusters_res_0_1, # custom color palette
        pt.size = 0.1) + # point size for plotting
  labs(title = "Default clusters - res. 0.1", # update plot title
       x = "UMAP 1", # update x-axis label
       y = "UMAP 2") # update y-axis label

Using the Seurat DimPlot() function, make a scatter plot in UMAP space grouping cells by timepoint:

# Create a custom color palette to group cells by timepoint
timepoint_cols <- c("#14b8a6", "#fcd34d", "#ef4444")
names(timepoint_cols) <- c("24hpf", "36hpf", "48hpf")

DimPlot(so, # the Seurat object
        reduction = "umap", # could also be "tsne" or "pca"
        group.by = "timepoint", # available column in our meta.data, from our Pluto sample data
        cols = timepoint_cols,
        pt.size = 0.1) + # point size for plotting
  labs(title = "Timepoint", # update plot title
       x = "UMAP 1", # update x-axis label
       y = "UMAP 2") # update y-axis label

Using the Seurat DimPlot() function, make a scatter plot in UMAP space grouping cells by custom annotation set “Default cluster - res. 1.0” and splitting cells by timepoint:

DimPlot(so, # the Seurat object
        reduction = "umap", # could also be "tsne" or "pca"
        group.by = "default_clusters_res_0_1", # custom annotation set
        cols = custom_palettes$default_clusters_res_0_1, # custom color palette
        split.by = "timepoint", # custom annotation set
        pt.size = 0.1) + # point size for plotting
  labs(title = "Default clusters - res. 0.1", # update plot title
       x = "UMAP 1", # update x-axis label
       y = "UMAP 2") # update y-axis label

Marker feature expression

Violin plot

Using the Seurat VlnPlot() function, make a violin plot grouping cells by custom annotation set “Default cluster - res. 1.0”:

VlnPlot(so, # the Seurat object
        features = c("olig2"), # feature(s) of interest
        group.by = "default_clusters_res_0_1", # custom annotation set
        cols = custom_palettes$default_clusters_res_0_1) + # custom color palette
  labs(title = "Expression of olig2", # update plot title
       x = "Default clusters - res. 0.1") # update x-axis label

Ridge plot

Using the Seurat RidgePlot() function, make a ridge plot grouping cells by custom annotation set “Default cluster - res. 1.0”:

RidgePlot(so, # the Seurat object
          features = c("olig2"), # feature(s) of interest
          group.by = "default_clusters_res_0_1", # custom annotation set
          cols = custom_palettes$default_clusters_res_0_1) + # custom color palette
  labs(title = "Expression of olig2", # update plot title
       y = "Default clusters - res. 0.1") + # update x-axis label
  theme_ridges(center = TRUE) # center the x and y axis labels

Feature plot

Using the Seurat FeaturePlot() function, make a scatter plot in UMAP space colored by feature expression:

FeaturePlot(so, # the Seurat object
            features = c("olig2"), # feature(s) of interest
            reduction = "umap", # could also be "tsne" or "pca"
            pt.size = 0.1) + # point size for plotting
  labs(title = "Expression of olig2", # update plot title
       x = "UMAP 1", # update x-axis label
       y = "UMAP 2") # update y-axis label

Dot plot

Using the Seurat DotPlot() function, make a dot plot colored by feature expression:

DotPlot(so, # the Seurat object
        features = c("olig2", "sox19a", "gfap", "dlb", "nkx2.2a"), # feature(s) of interest
        group.by = "default_clusters_res_0_1") + # custom annotation set
  labs(title = "Key marker genes", # update plot title
       x = "Genes", # update x-axis label
       y = "Default clusters - res. 0.1") # update y-axis label

For more visualization tutorials using the Seurat package, check out the Seurat visualization vignette here.