Visualization Guide
Zaoqu Liu
2026-01-29
Source:vignettes/visualization-guide.Rmd
visualization-guide.RmdIntroduction
MOFSR provides comprehensive visualization functions for multi-omics clustering analysis. All visualizations work with both base R graphics and ggplot2 when available.
Setup
library(MOFSR)
set.seed(42)
# Generate simulated data with 3 subtypes
n_samples <- 60
true_clusters <- rep(1:3, each = 20)
generate_omics <- function(n, p, clusters) {
n_clusters <- length(unique(clusters))
centers <- matrix(rnorm(n_clusters * p, sd = 2), n_clusters, p)
data <- t(sapply(clusters, function(k) {
centers[k, ] + rnorm(p, sd = 1)
}))
colnames(data) <- paste0("Feature_", seq_len(p))
rownames(data) <- paste0("Sample_", seq_len(n))
return(t(data))
}
data_list <- list(
mRNA = generate_omics(n_samples, 500, true_clusters),
miRNA = generate_omics(n_samples, 200, true_clusters),
methylation = generate_omics(n_samples, 100, true_clusters)
)
# Run clustering
result_snf <- run_snf(data_list, n_clusters = 3)UMAP Visualization
MOFSR includes an internal UMAP implementation that requires no external dependencies.
Basic UMAP Plot
# Compute UMAP coordinates
umap_coords <- compute_umap(data_list, n_neighbors = 15, n_epochs = 100, seed = 42)
# Basic plot
plot_umap(umap_coords, result_snf, title = "Multi-Omics UMAP")UMAP Parameters
| Parameter | Default | Description |
|---|---|---|
n_neighbors |
15 | Number of neighbors for local structure |
min_dist |
0.1 | Minimum distance between points |
n_epochs |
200 | Number of optimization iterations |
seed |
NULL | Random seed for reproducibility |
# Tight clustering (small min_dist)
umap_tight <- compute_umap(data_list, min_dist = 0.01, n_epochs = 100, seed = 42)
plot_umap(umap_tight, result_snf, title = "min_dist = 0.01 (Tight)")Consensus Matrix Heatmap
Consensus matrices show clustering stability across bootstrap resamples.
Generate Consensus Matrix
# Run consensus clustering
cc_result <- consensus_cluster(data_list$mRNA, maxK = 5, reps = 50, seed = 42)Basic Heatmap
plot_consensus_heatmap(cc_result[[3]]$consensusMatrix,
title = "Consensus Matrix (K=3)")Ordered by Clusters
plot_consensus_heatmap(cc_result[[3]]$consensusMatrix,
clusters = cc_result[[3]]$consensusClass,
title = "Consensus Matrix (Ordered)")Custom Colors
# Purple-green palette
custom_colors <- grDevices::colorRampPalette(c("white", "#7570B3", "#1B9E77"))(100)
plot_consensus_heatmap(cc_result[[3]]$consensusMatrix,
colors = custom_colors,
title = "Custom Color Palette")Cluster Quality Metrics
PAC (Proportion of Ambiguous Clustering)
Lower PAC indicates more stable clustering.
plot_cluster_quality(pac_values, title = "PAC Scores (Lower is Better)")Silhouette Analysis
Silhouette width measures how similar samples are to their own cluster compared to other clusters.
# Compute distance matrix
dist_mat <- dist(t(data_list$mRNA))
# Plot silhouette
plot_silhouette(result_snf$Cluster, dist_mat,
title = "Silhouette Analysis")Algorithm Comparison
Compare clustering results across multiple algorithms.
# Run multiple algorithms
algorithms <- c("SNF", "RGCCA", "CPCA")
results <- lapply(algorithms, function(alg) {
run_integration(data_list, algorithm = alg, n_clusters = 3)
})
names(results) <- algorithms
plot_algorithm_comparison(results, title = "Algorithm Agreement")Survival Analysis (Optional)
If you have survival data, MOFSR can generate Kaplan-Meier curves.
# Example with simulated survival data
time <- rexp(60, rate = 0.1)
event <- sample(0:1, 60, replace = TRUE, prob = c(0.3, 0.7))
# Plot survival curves
plot_survival(time, event, result_snf,
title = "Survival by Cluster",
conf_int = TRUE)Base R vs ggplot2
MOFSR automatically uses ggplot2 when available, falling back to base R graphics otherwise.
Check ggplot2 Availability
has_ggplot <- requireNamespace("ggplot2", quietly = TRUE)
cat("ggplot2 available:", has_ggplot, "\n")Consistent API
All plot functions have the same API regardless of the backend:
# These work identically with or without ggplot2
plot_umap(umap_coords, clusters)
plot_consensus_heatmap(matrix)
plot_silhouette(clusters, dist_matrix)
plot_cluster_quality(pac_values)Color Palettes
Nature-Style Palettes
# Nature Publishing Group colors
npg_colors <- c("#E64B35", "#4DBBD5", "#00A087", "#3C5488", "#F39B7F",
"#8491B4", "#91D1C2", "#DC0000", "#7E6148", "#B09C85")
# Lancet colors
lancet_colors <- c("#00468B", "#ED0000", "#42B540", "#0099B4", "#925E9F",
"#FDAF91", "#AD002A", "#ADB6B6", "#1B1919")Summary
MOFSR provides a complete visualization toolkit for multi-omics analysis:
| Function | Purpose |
|---|---|
plot_umap() |
Dimensionality reduction visualization |
plot_consensus_heatmap() |
Clustering stability |
plot_cluster_quality() |
Optimal K selection |
plot_silhouette() |
Cluster validation |
plot_algorithm_comparison() |
Method comparison |
plot_survival() |
Clinical outcome analysis |