--- title: "Get Started with glydraw" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Get Started with glydraw} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>", dpi = 80 ) ``` `glydraw` draws SNFG glycan cartoons from glycan structure text or `glyrepr::glycan_structure()` objects. `draw_cartoon()` returns a ggplot2 object with class `glydraw_cartoon`. You can print it directly, pass it to `save_cartoon()`, or add ggplot2 layers when needed. This vignette uses IUPAC-condensed strings because they are compact and easy to copy into examples. ```{r setup} library(glydraw) ``` ## Draw one glycan The first argument, `structure`, is the glycan to draw. It can be a character string in a notation supported by `glyparse::auto_parse()`, or a `glyrepr::glycan_structure()` value. ```{r basic-cartoon, fig.width = 4.83, fig.height = 2.02} n_core <- "Man(a1-3)[Man(a1-6)]Man(b1-4)GlcNAc(b1-4)GlcNAc(b1-" draw_cartoon(n_core) ``` For a sketch-like appearance, use `draw_cartoon_sketch()` instead of `draw_cartoon()`. ```{r sketch-cartoon, fig.width = 4.84, fig.height = 2.03} draw_cartoon_sketch(n_core) ``` ## Basic options ### `show_linkage` `show_linkage` controls whether glycosidic linkage annotations are shown. Substituent annotations are always shown. ```{r show-linkage, fig.width = 4.83, fig.height = 2.02} draw_cartoon(n_core, show_linkage = FALSE) ``` ### `orient` `orient` controls the direction in which the glycan extends from its reducing end. Choose `"left"`, `"right"`, `"up"`, or `"down"`; the default is `"left"`. ```{r orient, fig.width = 2.02, fig.height = 4.83} draw_cartoon(n_core, orient = "up") ``` ### `red_end` annotation `red_end` controls what is drawn after the reducing-end line. Possible values are: - `""`: draw nothing (the default) - `"~"`: draw a wavy line - Any other text: draw that text after the line - An amino-acid sequence: custom text with one tagged glycosite ```{r red-end-default, fig.width = 4.84, fig.height = 2.03} draw_cartoon(n_core, red_end = "") ``` ```{r red-end-wave, fig.width = 4.88, fig.height = 2.03} draw_cartoon(n_core, red_end = "~") ``` ```{r red-end-text, fig.width = 5.38, fig.height = 2.03} draw_cartoon(n_core, red_end = "Asn") ``` To annotate an amino-acid sequence at the reducing end, wrap the glycosite in `` and `` tags. ```{r red-end-sequence, fig.width = 5.02, fig.height = 2.03} draw_cartoon(n_core, red_end = "ABCDEFJHI") ``` Although this notation is slightly verbose, it lets you use arbitrary characters in the sequence without ambiguity. ```{r red-end-site, fig.width = 5.02, fig.height = 2.13} draw_cartoon(n_core, red_end = "N-X-S/T") ``` ## Styles `glydraw` provides many additional visual options, including linewidths, node sizes, colors, and fonts. The style system collects these options while preserving the information conveyed by the glycan notation. Use the `style` argument to apply these customizations. By default, `style = style_glydraw()`, which returns a style object containing the available settings. ```{r style-default} style_glydraw() ``` The style contains the following parameters: - `fuc_orient`: orientation of Fuc-like residues - `red_end`: reducing-end annotation, as described above - `red_end_length`: length of the reducing-end line - `red_end_size`: size of custom reducing-end text - `edge_linewidth`: linewidth of glycosidic linkages - `node_linewidth`: linewidth of node borders - `node_size`: multiplier for node size - `font_family`: font family for text annotations - `colors`: palette used to fill the nodes The following sections describe these settings in more detail. ### `fuc_orient` `fuc_orient` controls how Fuc-like triangles are rotated. The default, `"flex"`, points non-reducing Fuc residues toward their rendered linkage direction. Use `"up"` when every Fuc triangle should point upward. ```{r fuc-orient, fig.width = 2.47, fig.height = 1.91} fucosylated <- "Gal(b1-3)[Fuc(a1-4)]GlcNAc(b1-" draw_cartoon(fucosylated, style = style_glydraw(fuc_orient = "flex")) draw_cartoon(fucosylated, style = style_glydraw(fuc_orient = "up")) ``` ### `red_end` in a style This setting controls the same feature as the `red_end` argument described above. It is also available in the style object so that it can be reused across drawings. The explicit `red_end` argument in `draw_cartoon()` overrides `style$red_end`. ```{r red-end-override, fig.width = 5.38, fig.height = 2.03} # The explicit argument overrides the style setting. draw_cartoon(n_core, red_end = "Asn", style = style_glydraw(red_end = "~")) ``` ### `red_end_length` `red_end_length` is the length of the reducing-end line in plot-coordinate units. It can be any non-negative number. Setting it to `0` omits the line and any reducing-end wave or custom text while retaining the core anomer annotation. ```{r red-end-length, fig.width = 5.31, fig.height = 2.03} draw_cartoon(n_core, style = style_glydraw(red_end_length = 1)) ``` ```{r red-end-length-zero, fig.width = 4.63, fig.height = 2.03} # The custom text is omitted when `red_end_length = 0`. draw_cartoon(n_core, red_end = "Asn", style = style_glydraw(red_end_length = 0)) ``` ### `red_end_size` `red_end_size` controls the size of custom text passed through `red_end`. It does not affect the `"~"` wave. ```{r red-end-size, fig.width = 5.66, fig.height = 2.03} draw_cartoon(n_core, red_end = "Asn", style = style_glydraw(red_end_size = 10)) ``` ### `edge_linewidth` and `node_linewidth` `edge_linewidth` controls linkage line width. `node_linewidth` controls the border width of residue symbols. ```{r linewidth, fig.width = 4.83, fig.height = 2.02} draw_cartoon( n_core, style = style_glydraw( edge_linewidth = 1.4, node_linewidth = 0.4 ) ) ``` ### `node_size` `node_size` is a multiplier for the default residue-symbol size. The default is `1`. Larger nodes keep the same cartoon layout but draw larger symbols. ```{r node-size, fig.width = 4.89, fig.height = 2.12} draw_cartoon(n_core, style = style_glydraw(node_size = 1.2)) draw_cartoon(n_core, style = style_glydraw(node_size = 1.6)) ``` Very large symbols can overlap, so values larger than `2` are rejected. Linkage annotations are hidden with a warning when the requested node size leaves too little annotation space. **Tip:** To make a compact cartoon while keeping the symbols legible, increase `node_size`, `node_linewidth`, and `edge_linewidth`. If linkage information is not essential for the display, also set `show_linkage = FALSE`. This makes sure the cartoon still looks nice when you shrink in Adobe Illustration. ```{r compact-cartoon, fig.width = 2.21, fig.height = 1} compact_style <- style_glydraw( node_size = 1.4, edge_linewidth = 1.5, node_linewidth = 1.5 ) draw_cartoon(n_core, show_linkage = FALSE, style = compact_style) ``` ### `colors` `colors` is a complete named palette in the format returned by `glydraw_colors()`. Modify entries in that palette to customize the corresponding residue colors. By default, `glydraw_colors()` uses the colors defined by [SNFG](https://www.ncbi.nlm.nih.gov/glycans/snfg.html). ```{r colors, fig.width = 4.83, fig.height = 2.02} colors <- glydraw_colors() colors[c("glyGreen", "glyBlue")] <- c("#4DAF4A", "#377EB8") draw_cartoon( n_core, style = style_glydraw(colors = colors) ) ``` ### Reusing styles Create a style object once and reuse it for multiple glycans. ```r glycans <- c( core = n_core, antenna = "Gal(b1-4)GlcNAc(b1-", fucosylated = "Gal(b1-4)[Fuc(a1-3)]GlcNAc(b1-" ) my_style <- style_glydraw( node_size = 1.4, edge_linewidth = 1.5, node_linewidth = 1.5 ) draw_cartoon(glycans[[1]], style = my_style) draw_cartoon(glycans[[2]], style = my_style) draw_cartoon(glycans[[3]], style = my_style) ``` ### Bundled styles `glydraw` also provides presets based on common glycan-drawing conventions. ```{r style-glygen, fig.width = 5.35, fig.height = 2.03} draw_cartoon(n_core, style = style_glygen()) ``` ```{r style-snfg, fig.width = 5.35, fig.height = 2.10} draw_cartoon(n_core, style = style_snfg()) ``` ```{r style-glycoworkbench, fig.width = 5.35, fig.height = 2.03} draw_cartoon(n_core, style = style_glycoworkbench()) ``` These styles can also be used with `draw_cartoon_sketch()`. ```{r sketch-style-glycoworkbench, fig.width = 5.35, fig.height = 2.03} draw_cartoon_sketch(n_core, style = style_glycoworkbench()) ``` ## Node highlighting `highlight` marks selected residue nodes. It is available when `structure` is a `glyrepr::glycan_structure()` object. Node indices match the monosaccharide order in the printed IUPAC-condensed structure. ```{r highlight, fig.width = 2.48, fig.height = 2.02} highlight_glycan <- glyrepr::as_glycan_structure( "Gal(b1-3)[GlcNAc(b1-6)]GalNAc(a1-" ) draw_cartoon(highlight_glycan, highlight = c(1, 3)) ``` ## Save one cartoon Use `save_cartoon()` when you already have one cartoon object. ```{r save-cartoon} cartoon <- draw_cartoon(n_core, style = style_glydraw(red_end = "~")) outfile <- file.path(tempdir(), "n-core.png") save_cartoon(cartoon, outfile, scale = 2) outfile ``` `glydraw` does not expose separate `width` and `height` controls because each cartoon has a natural size calculated from its glycan structure. `scale` preserves the aspect ratio and relative symbol sizes. ## Export many cartoons Use `export_cartoons()` to draw and save a vector of glycans in one call. The input can be a character vector or a `glyrepr::glycan_structure()` vector. ```{r export-cartoons} glycans <- c( core = "Man(a1-3)Man(b1-4)GlcNAc(b1-", antenna = "Gal(b1-4)GlcNAc(b1-", fucosylated = "Gal(b1-4)[Fuc(a1-3)]GlcNAc(b1-" ) outdir <- file.path(tempdir(), "glydraw-cartoons") suppressMessages( cartoons <- export_cartoons( glycans, outdir, file_ext = "png", scale = 1.5, style = style_glydraw(red_end = "~", node_size = 1.1) ) ) list.files(outdir) ``` `export_cartoons()` creates `dirname` when needed and returns the list of cartoons invisibly. File names come from vector names when present. Unnamed inputs use sanitized IUPAC-condensed structure text as file names, and duplicate names are made unique.