Type: Package
Title: Complex Heatmaps for Single Cell Expression Data with Dual Information Display
Version: 0.1.2
Maintainer: XueCheng Fang <xuecheng328@gmail.com>
Description: Creates complex heatmaps for single cell RNA-seq data that simultaneously display gene expression levels (as color intensity) and expression percentages (as circle sizes). Supports gene grouping, cell type annotations, and time point comparisons. Built on top of 'ComplexHeatmap' and integrates with 'Seurat' objects. For more details see Gu (2022) <doi:10.1002/imt2.43> and Hao (2024) <doi:10.1038/s41587-023-01767-y>.
License: MIT + file LICENSE
Encoding: UTF-8
RoxygenNote: 7.3.2
Depends: R (≥ 4.0.0)
Imports: ComplexHeatmap (≥ 2.10.0), Seurat (≥ 4.0.0), dplyr (≥ 1.0.0), tidyr (≥ 1.0.0), RColorBrewer, circlize (≥ 0.4.0), grid, grDevices, stats, magrittr
Suggests: testthat (≥ 3.0.0), knitr, rmarkdown, viridis, devtools, BiocManager, ggsci, SeuratObject
URL: https://github.com/FanXuRong/SingleCellComplexHeatMap
BugReports: https://github.com/FanXuRong/SingleCellComplexHeatMap/issues
VignetteBuilder: knitr
NeedsCompilation: no
Packaged: 2025-06-24 15:35:42 UTC; fanxr
Author: XueCheng Fang [aut, cre]
Repository: CRAN
Date/Publication: 2025-06-28 17:40:02 UTC

Create Cell Type and Time Point Annotations for Heatmap Columns

Description

Parses column names to extract time points and cell types, creates annotations and reorders matrices.

Usage

create_cell_annotations(
  exp_mat,
  percent_mat,
  split_pattern = "_",
  time_position = 1,
  celltype_start = 2,
  time_points_order = NULL,
  cell_types_order = NULL,
  time_color_palette = "Accent",
  celltype_color_palette = "Dark2",
  show_time_annotation = TRUE,
  show_celltype_annotation = TRUE,
  time_point_title = "Time Point",
  cell_type_title = "Cell Type"
)

Arguments

exp_mat

Expression matrix with samples as columns

percent_mat

Percentage matrix with samples as columns

split_pattern

Character string used to split column names (default: "_")

time_position

Integer indicating position of time point in split names (default: 1)

celltype_start

Integer indicating starting position of cell type in split names (default: 2)

time_points_order

Character vector specifying order of time points (default: NULL for automatic)

cell_types_order

Character vector specifying order of cell types (default: NULL for automatic)

time_color_palette

Character string specifying palette name OR character vector of colors for time points (default: "Accent")

celltype_color_palette

Character string specifying palette name OR character vector of colors for cell types (default: "Dark2")

show_time_annotation

Logical indicating whether to show time point annotation (default: TRUE)

show_celltype_annotation

Logical indicating whether to show cell type annotation (default: TRUE)

time_point_title

Character string for time point annotation title (default: "Time Point")

cell_type_title

Character string for cell type annotation title (default: "Cell Type")

Value

A list containing exp_mat_ordered (reordered expression matrix), percent_mat_ordered (reordered percentage matrix), col_annotation (ComplexHeatmap column annotation object), col_split_factor (factor for column splitting based on time points), and annotation_df (data frame with column annotations).

See Also

create_single_cell_complex_heatmap, prepare_expression_matrices

Examples

# Load a small example Seurat object
data("pbmc_small", package = "SeuratObject")
pbmc_small$timepoint <- sample(c("0h", "6h"), ncol(pbmc_small), replace = TRUE)
pbmc_small$timepoint_celltype <- paste(pbmc_small$timepoint, pbmc_small$RNA_snn_res.0.8, sep = "_")
features <- c("CD3D", "CD79A", "MS4A1")

# Prepare expression matrices first
matrices <- prepare_expression_matrices(pbmc_small, features, group_by = "timepoint_celltype")

# Create cell annotations with custom ordering
col_annotations <- create_cell_annotations(
  exp_mat = matrices$exp_mat,
  percent_mat = matrices$percent_mat,
  split_pattern = "_",
  time_points_order = c("0h", "6h"),
  cell_types_order = levels(pbmc_small$RNA_snn_res.0.8)
)

# Access results
ordered_exp_mat <- col_annotations$exp_mat_ordered


Create Gene Group Annotations for Heatmap Rows

Description

Creates gene grouping annotations and reorders expression matrices based on gene classifications.

Usage

create_gene_annotations(
  exp_mat,
  percent_mat,
  gene_classification,
  color_palette = "Set1",
  sort_within_groups = TRUE,
  annotation_title = "Gene Group"
)

Arguments

exp_mat

Expression matrix with genes as rows

percent_mat

Percentage matrix with genes as rows

gene_classification

Named list where names are group labels and values are character vectors of gene names

color_palette

Character string specifying palette name OR character vector of colors (default: "Set1")

sort_within_groups

Logical indicating whether to sort genes within each group (default: TRUE)

annotation_title

Character string for annotation title (default: "Gene Group")

Value

A list containing exp_mat_ordered (reordered expression matrix), percent_mat_ordered (reordered percentage matrix), row_annotation (ComplexHeatmap row annotation object), row_split_factor (factor for row splitting), and annotation_df (data frame with gene annotations).

See Also

create_single_cell_complex_heatmap, prepare_expression_matrices

Examples

# Load a small example Seurat object
data("pbmc_small", package = "SeuratObject")
features <- c("CD3D", "CD79A", "MS4A1", "GZMK", "CCL5")

# Prepare expression matrices first
matrices <- prepare_expression_matrices(pbmc_small, features, group_by = "RNA_snn_res.0.8")

# Define gene groups
gene_groups <- list(
  "T-cell Markers" = c("CD3D", "GZMK", "CCL5"),
  "B-cell Markers" = c("CD79A", "MS4A1")
)

# Create gene annotations
annotations <- create_gene_annotations(
  exp_mat = matrices$exp_mat,
  percent_mat = matrices$percent_mat,
  gene_classification = gene_groups,
  color_palette = "Set1"
)

# Access results
ordered_exp_mat <- annotations$exp_mat_ordered


Create Complex Heatmap for Single Cell Expression Data

Description

Creates a complex heatmap that displays both gene expression levels (as color intensity) and expression percentages (as circle sizes) for single cell RNA-seq data. This function provides extensive customization options while maintaining ease of use.

Usage

create_single_cell_complex_heatmap(
  seurat_object,
  features,
  gene_classification = NULL,
  group_by = "seurat_clusters",
  idents = NULL,
  time_points_order = NULL,
  cell_types_order = NULL,
  color_range = c(-1, 0, 2),
  color_palette = NULL,
  max_circle_size = 2,
  row_fontsize = 8,
  col_fontsize = 9,
  col_name_rotation = 90,
  row_title_fontsize = 10,
  col_title_fontsize = 10,
  show_heatmap_legend = TRUE,
  show_percentage_legend = TRUE,
  legend_side = "right",
  cell_border_color = "grey80",
  split_pattern = "_",
  gene_color_palette = "Set1",
  time_color_palette = "Accent",
  celltype_color_palette = "Dark2",
  show_gene_grouping = NULL,
  show_time_annotation = TRUE,
  show_celltype_annotation = TRUE,
  split_by = "time",
  merge_legends = TRUE,
  percentage_legend_title = "Expression %",
  percentage_legend_labels = c("0%", "25%", "50%", "75%", "100%"),
  percentage_breaks = NULL,
  return_data = FALSE,
  save_plot = NULL,
  plot_width = 10,
  plot_height = 8,
  plot_dpi = 300,
  assay = NULL,
  slot = "scale.data",
  cluster_cells = TRUE,
  cluster_features = TRUE,
  clustering_distance_rows = "euclidean",
  clustering_distance_cols = "euclidean",
  clustering_method_rows = "complete",
  clustering_method_cols = "complete",
  color_palette_main = c("blue", "white", "red"),
  annotation_colors = NULL,
  show_feature_names = TRUE,
  feature_names_gp = NULL,
  legend_title = "Expression",
  gene_group_title = "Gene Group",
  time_point_title = "Time Point",
  cell_type_title = "Cell Type",
  show_cell_borders = TRUE,
  show_column_annotation = TRUE,
  gene_name_mapping = NULL,
  ...
)

Arguments

seurat_object

A Seurat object containing single cell data

features

Character vector of gene names to plot

gene_classification

Named list where names are group labels and values are character vectors of gene names (default: NULL for no gene grouping)

group_by

Character string specifying the metadata column to group by (default: "seurat_clusters")

idents

Numeric or character vector specifying which cell groups to include (default: NULL for all)

time_points_order

Character vector specifying order of time points. Only affects display order, not data filtering (default: NULL for automatic)

cell_types_order

Character vector specifying order of cell types. Only affects display order, not data filtering (default: NULL for automatic)

color_range

Numeric vector specifying color mapping break points for expression values. Its length must match color_palette if color_palette is a vector. (default: c(-1, 0, 2))

color_palette

Character vector specifying colors for expression heatmap. Its length must match color_range. If NULL, a default palette (viridis or color_palette_main) is generated to match color_range length (default: NULL)

max_circle_size

Numeric specifying maximum circle radius in mm. This applies to the highest percentage value in percentage_breaks (default: 2)

row_fontsize

Numeric specifying row name font size (default: 8)

col_fontsize

Numeric specifying column name font size (default: 9)

col_name_rotation

Numeric specifying column name rotation angle (default: 90)

row_title_fontsize

Numeric specifying row title font size (default: 10)

col_title_fontsize

Numeric specifying column title font size (default: 10)

show_heatmap_legend

Logical indicating whether to show heatmap legend (default: TRUE)

show_percentage_legend

Logical indicating whether to show percentage legend (default: TRUE)

legend_side

Character string specifying legend position (default: "right")

cell_border_color

Character string specifying cell border color (default: "grey80")

split_pattern

Character string used to split column names for parsing (default: "_")

gene_color_palette

Character string specifying palette name OR character vector of colors for gene groups (default: "Set1")

time_color_palette

Character string specifying palette name OR character vector of colors for time points (default: "Accent")

celltype_color_palette

Character string specifying palette name OR character vector of colors for cell types (default: "Dark2")

show_gene_grouping

Logical indicating whether to show gene grouping (default: TRUE if gene_classification provided)

show_time_annotation

Logical indicating whether to show time point annotation (default: TRUE)

show_celltype_annotation

Logical indicating whether to show cell type annotation (default: TRUE)

split_by

Character string specifying how to split columns: "time", "celltype", or "none" (default: "time")

merge_legends

Logical indicating whether to merge legends (default: TRUE)

percentage_legend_title

Character string for percentage legend title (default: "Expression %")

percentage_legend_labels

Character vector for percentage legend labels

percentage_breaks

Numeric vector specifying actual percentage values corresponding to labels

return_data

Logical; if TRUE, return underlying data instead of drawing only

save_plot

File path to save the drawn heatmap (PNG)

plot_width

Numeric; width in inches for saving

plot_height

Numeric; height in inches for saving

plot_dpi

Numeric; resolution (DPI) for saved plot

assay

Seurat assay name to extract data from

slot

Seurat slot name within assay (e.g., "scale.data", "data")

cluster_cells

Logical; whether to cluster columns (cells)

cluster_features

Logical; whether to cluster rows (features)

clustering_distance_rows

Distance metric for row clustering

clustering_distance_cols

Distance metric for column clustering

clustering_method_rows

Clustering method for rows

clustering_method_cols

Clustering method for columns

color_palette_main

Fallback color palette when viridis unavailable

annotation_colors

Named list of custom annotation colors

show_feature_names

Logical; whether to show feature (row) names

feature_names_gp

gpar object controlling feature name appearance

legend_title

Character; title for main heatmap legend

gene_group_title

Character string for gene group annotation title (default: "Gene Group")

time_point_title

Character string for time point annotation title (default: "Time Point")

cell_type_title

Character string for cell type annotation title (default: "Cell Type")

show_cell_borders

Logical indicating whether to show cell border lines (default: TRUE)

show_column_annotation

Logical indicating whether to show column annotations (default: TRUE)

gene_name_mapping

Named character vector for mapping gene names, where names are original gene names and values are display names (default: NULL)

...

Additional arguments passed to ComplexHeatmap::Heatmap()

Value

A ComplexHeatmap object. If return_data is TRUE, returns a list containing the heatmap object and underlying data matrices.


Get colors with simplified approach

Description

Get colors with simplified approach

Usage

get_colors_simplified(n_colors, palette_input)

Arguments

n_colors

Number of colors needed

palette_input

Either palette name (string) or color vector

Value

Vector of colors


Prepare Expression and Percentage Matrices from Seurat DotPlot

Description

Extracts and reshapes expression data from a Seurat DotPlot object into matrices suitable for complex heatmap visualization.

Usage

prepare_expression_matrices(
  seurat_object,
  features,
  group_by = "seurat_clusters",
  idents = NULL,
  split_pattern = "_",
  time_position = 1,
  celltype_start = 2
)

Arguments

seurat_object

A Seurat object containing single cell data

features

Character vector of gene names to plot

group_by

Character string specifying the metadata column to group by (default: "seurat_clusters")

idents

Numeric or character vector specifying which cell groups to include (default: NULL for all)

split_pattern

Character string used to split column names for parsing (default: "_")

time_position

Integer indicating position of time point in split names (default: 1)

celltype_start

Integer indicating starting position of cell type in split names (default: 2)

Value

A list containing exp_mat (matrix of scaled expression values), percent_mat (matrix of expression percentages), and dotplot_data (original DotPlot data frame).

See Also

create_single_cell_complex_heatmap

Examples

# Load a small example Seurat object
data("pbmc_small", package = "SeuratObject")
features <- c("CD3D", "CD79A", "MS4A1")

# Basic usage
matrices <- prepare_expression_matrices(
  seurat_object = pbmc_small,
  features = features,
  group_by = "RNA_snn_res.0.8"
)

# Access the results
expression_matrix <- matrices$exp_mat
percentage_matrix <- matrices$percent_mat