--- title: "Getting started with plotomics" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Getting started with plotomics} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r setup, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` plotomics ships GPU-accelerated visualization widgets for bioinformatics data. Every widget is an htmlwidget: it works in the RStudio Viewer, R Markdown, Quarto documents, and Shiny apps out of the box. This vignette walks through four common plot types with synthetic data so you can run every example without any external files. ## Volcano plot A volcano plot shows differential-expression results: log2 fold change on the x-axis, statistical significance on the y-axis. ```{r volcano, eval = FALSE} library(plotomics) set.seed(42) de <- data.frame( x = rnorm(5000), y = abs(rnorm(5000)) * 3, label = paste0("GENE", seq_len(5000)) ) volcano(de, fc_threshold = 1, label_top_n = 5) ``` The widget renders all 5 000 points on the GPU, so even with hundreds of thousands of genes the plot stays interactive. Threshold lines and gene labels are vector overlays drawn on top. ## Expression heatmap `bioheatmap()` displays a numeric matrix as a colormap texture. Row and column labels come from `dimnames`. ```{r heatmap, eval = FALSE} set.seed(1) mat <- matrix(rnorm(200 * 50), nrow = 200, ncol = 50) rownames(mat) <- paste0("gene", seq_len(200)) colnames(mat) <- paste0("sample", seq_len(50)) bioheatmap(mat, z_score = TRUE, colormap = "rdbu") ``` Setting `z_score = TRUE` normalizes each row before coloring, which is useful when comparing expression levels across genes with different baselines. The `"rdbu"` colormap gives a red-white-blue diverging scale centered at zero. ## Dot plot A dot plot encodes two values per cell: dot size for the fraction of cells expressing a gene, and dot colour for the expression level. ```{r dotplot, eval = FALSE} genes <- c("CD3D", "CD3E", "CD8A", "MS4A1", "CD79A", "LYZ", "CD14") clusters <- c("CD8 T", "CD4 T", "B", "Mono") df <- expand.grid( gene = factor(genes, levels = genes), cluster = factor(clusters, levels = clusters), stringsAsFactors = FALSE ) set.seed(7) df$pct <- sample(5:95, nrow(df), replace = TRUE) df$value <- round(runif(nrow(df), 0, 3), 1) dotplot(df, colormap = "viridis") ``` Row and column order follows the factor levels of `gene` and `cluster`, so you control the layout without sorting the data frame itself. ## UMAP / t-SNE embedding `embedding()` renders a 2-D scatter of reduced-dimension coordinates. Points are drawn with WebGL, so several hundred thousand cells stay smooth. ```{r embedding, eval = FALSE} set.seed(3) n <- 2000 emb <- data.frame( x = c(rnorm(n/2, -3), rnorm(n/2, 3)), y = c(rnorm(n/2, 0), rnorm(n/2, 2)), color = factor(rep(c("Cluster A", "Cluster B"), each = n/2)) ) embedding(emb, point_size = 4) ``` When `color` is a factor, the legend order and colour assignment follow the factor levels. This matches the `drop = FALSE` convention in ggplot2: unused levels are preserved and the palette stays stable across subsets. ## Shiny usage Every widget comes with a `*Output()` / `render*()` pair for Shiny. A minimal app: ```{r shiny, eval = FALSE} library(shiny) library(plotomics) ui <- fluidPage( volcanoOutput("vol", height = "500px") ) server <- function(input, output) { output$vol <- renderVolcano({ df <- data.frame(x = rnorm(1000), y = abs(rnorm(1000)) * 3) volcano(df) }) } shinyApp(ui, server) ``` ## Next steps All 15 widgets follow the same pattern: pass a data frame (or matrix), set options, get back an htmlwidget. See the function reference for the full list and their parameters.