Draw Beautiful Symbol Nomenclature for Glycans

A 'ggplot2'-native plotting engine for drawing reproducible beautiful Symbol Nomenclature for Glycans (SNFG) glycan cartoons from glycan structure objects or text notations, with support for batch export, structural highlighting, and deep appearance customization. It follows the SNFG specification described at < https://www.ncbi.nlm.nih.gov/glycans/snfg.html>.


glydraw

Lifecycle:experimental CRANstatus R-universeversion R-CMD-check Codecov testcoverage

glydraw is a ggplot2-native R engine for drawing reproducible SNFG glycan cartoons from glycan structure objects or text notations, with support for batch export, structural highlighting, and deep appearance customization.

Installation

Install glycoverse

We recommend installing the meta-package glycoverse, which includes this package and other core glycoverse packages.

Install glydraw alone

If you don’t want to install all glycoverse packages, you can only install glydraw.

You can install the latest release of glydraw from CRAN:

pak::pkg_install("glydraw")

Or from r-universe:

pak::repo_add(glycoverse = "https://glycoverse.r-universe.dev")
pak::pkg_install("glydraw")

Or install the latest GitHub release:

pak::pkg_install("glycoverse/glydraw@*release")

Or install the development version from GitHub:

pak::pkg_install("glycoverse/glydraw")

Example

Plot one glycan

library(glydraw)

glycan <- paste0(
  "Glc(a1-2)Glc(a1-3)Glc(a1-3)Man(a1-2)Man(a1-2)Man(a1-3)[Man(a1-2)Man(a1-3)",
  "[Man(a1-2)Man(a1-6)]Man(a1-6)]Man(b1-4)GlcNAc(b1-4)GlcNAc(a1-"
)
draw_cartoon(glycan, red_end = "PP-Dol")

Plot one sketch-style glycan

draw_cartoon_sketch() plots a glycan cartoon with hand-drawn strokes and patterned residue fills.

library(glydraw)

glycan <- paste0(
  "Glc(a1-2)Glc(a1-3)Glc(a1-3)Man(a1-2)Man(a1-2)Man(a1-3)[Man(a1-2)Man(a1-3)",
  "[Man(a1-2)Man(a1-6)]Man(a1-6)]Man(b1-4)GlcNAc(b1-4)GlcNAc(a1-"
)
draw_cartoon_sketch(glycan, red_end = "PP-Dol", seed = 1)

ggplot2 extension

glydraw provides ggplot2 extensions to plot glycan cartoons on a panel, axis, or legend. For example, geom_glycan() adds glycan cartoons to a bar plot:

library(ggplot2)
library(glydraw)
library(tibble)

plot_data <- tibble(
  glycan = c("Gal(b1-3)GalNAc(a1-", "Gal(b1-3)[GlcNAc(b1-6)]GalNAc(a1-"),
  value = c(1, 2)
)

ggplot(plot_data, aes(glycan, value)) +
  geom_col(fill = "grey70") +
  geom_glycan(
    aes(structure = glycan),
    orient = "up",
    size = 0.5,
    vjust = 0,
    position = position_nudge(y = 0.1)
  ) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.4))) +
  theme_classic() +
  theme(
    axis.text.x = element_blank(),
    axis.ticks.x = element_blank()
  )

ComplexHeatmap extension

anno_glycan() adds glycan cartoons as row or column labels in a ComplexHeatmap heatmap.

suppressPackageStartupMessages(library(ComplexHeatmap))

mat <- matrix(
  seq_len(9),
  nrow = 3,
  dimnames = list(paste0("row", 1:3), paste0("column", 1:3))
)
structures <- c(
  "GlcNAc(b1-",
  "Gal(b1-4)GlcNAc(b1-",
  "Neu5Ac(a2-?)Gal(b1-4)GlcNAc(b1-"
)

Heatmap(
  mat,
  name = "Corr. Coef.",
  show_row_names = FALSE,
  show_column_names = FALSE,
  row_dend_side = "right",
  column_dend_side = "bottom",
  left_annotation = rowAnnotation(
    glycan = anno_glycan(structures, which = "row")
  ),
  top_annotation = HeatmapAnnotation(
    glycan = anno_glycan(structures, which = "column")
  )
)

Gallery

glycan <- paste0(
  "Neu5Ac(a2-3)Gal(b1-3)[Fuc(a1-2)Gal(b1-3)[Fuc(a1-4)]GlcNAc(b1-3)",
  "[Gal(b1-4)[Fuc(a1-3)]GlcNAc(b1-6)]Gal(b1-4)GlcNAc(b1-6)]GalNAc(a1-"
)
draw_cartoon(glycan, style = style_glygen())
glycan <- "Gal(b1-3)[Neu5Ac(a2-3)Gal6S(b1-4)[Fuc(a1-3)]GlcNAc(b1-6)]GalNAc(a1-"
draw_cartoon(glycan, orient = "up", red_end = "Ser/Thr")
glycan <- "Fuc(a1-3)[Fuc(a1-6)]GlcNAc(b1-"
draw_cartoon(
  glycan,
  orient = "up",
  red_end = "Asn",
  style = style_glydraw(fuc_orient = "up")
)
glycan <- paste0(
  "WURCS=2.0/3,4,3/[a2122h-1a_1-5_2*N][a1122h-1a_1-5_2*OP^XOCCN/3O/3=O]",
  "[a1122h-1a_1-5_6*OP^XOCCN/3O/3=O]/1-2-3-3/a4-b1_b6-c1_c2-d1"
)
draw_cartoon(glycan)
glycan <- "Glc(b1-4)[Xyl(a1-6)][Xyl(a1-2)]Glc(b1-4)[Xyl(a1-6)]Glc(b1-4)[Fuc(a1-2)Gal(b1-2)Xyl(a1-6)]Glc(b1-4)Glc(b1-4)[Xyl(a1-6)]Glc(b1-"
draw_cartoon(glycan, style = style_glydraw(fuc_orient = "up"))

Reference manual

It appears you don't have a PDF plugin for this browser. You can click here to download the reference manual.

install.packages("glydraw")

0.9.0 by Bin Fu, a month ago


https://glycoverse.github.io/glydraw/, https://github.com/glycoverse/glydraw


Report a bug at https://github.com/glycoverse/glydraw/issues


Browse source code at https://github.com/cran/glydraw


Authors: Bin Fu [aut, cre, cph] , Xisong Feng [aut]


Documentation:   PDF Manual  


MIT + file LICENSE license


Imports glyrepr, rlang, dplyr, ggplot2, igraph, purrr, png, glyparse, cli, checkmate, scales, fs

Suggests ComplexHeatmap, ggraph, ggsketch, knitr, ragg, rmarkdown, systemfonts, testthat, tibble, vdiffr


Imported by glymotif.


See at CRAN