Complete canonical API text; task articles explain the workflows. Tutorials
Site guide · find your task
Setup and learning paths
HomeInstall and prepare the environmentChoose your learning moduleModule I · Chord
1.1 Tables and field meanings1.2 Produce and import comparisons1.3 Build the layers step by step1.4 Direction, curvature and clearance1.5 Filter and summarize links1.6 Full source-file workflow1.7 Complete chord showcaseModule II · Collinear
2.1 Reuse chord input tables2.2 Switch coordinates and add layers2.3 Routes, clearance and the ruler2.4 Compare CDS neighbourhoods2.5 Focus, anchors and segments2.6 Complete collinear showcaseModule III · Plasmid
3.1 DNA, annotations and 13 references3.2 From a circle to annotation layers3.3 Features, primers and restriction3.4 Thirteen plasmid references3.5 Complete plasmid casesConsult as needed · Data and layers
Prepare tables and coordinatesImport and convert dataImport nucleotide and protein alignmentsProject protein intervals to genomic coordinatesFeatures, stacking and genomic decorationLabels and local placementQuantitative tracksMappings, scales, guides and themesSet values by sequence and strandCommon adjustments and grammarExport, preview and diagnosticsLearning map and reference
Articles and complete workflowsFunction referenceReproducible galleryFrequently asked questionsMigrate to the candidate APITerminology and design sourcesDevelopment status and changesLike geom_gene_label(), with deterministic external label
placement. The default "radial" keeps horizontal text on a contour
following each sequence; crowded names fan out along that contour.
"auto" aligns left/right names in columns and uses radial placement
elsewhere. "arc" rotates text along the sequence tangent.
Usage
Code
geom_gene_label_repel(
mapping = NULL,
data = NULL,
label_layout = "radial",
label_wrap = NULL,
label_fit = "wrap",
label_max_lines = 2L,
label_side = "outside",
max_overlaps = Inf,
label_segment_overlap = "fade",
label_segment_overlap_alpha = 0.18,
label_segment_linetype = "auto",
position = "identity",
show.legend = FALSE,
inherit.aes = FALSE,
label_min_size = 1.5,
...
)Arguments
- mapping
Default NULL (uses pre-computed data)
- data
Default NULL (retrieved automatically from the layout)
- label_layout
Character, default
"radial". Label layout:"radial"arranges horizontal external labels along sequence-relative contours, with straight normal leaders or a short normal departure followed by a long connector when displaced;"auto"uses shared vertical columns on the left/right and radial placement elsewhere;"arc"rotates text along the sequence tangent. The former"aligned"mode has been removed; use"auto"for side columns.- label_wrap
Numeric or NULL, default NULL. When set, long gene annotations are wrapped at this many characters (e.g. 15), overriding
label_fit.- label_fit
Character, default
"wrap". How labels whose initial boxes are crowded or unusually wide are fitted before deterministic layout:"wrap"preserves the complete annotation over multiple lines,"ellipsis"uses a single shortened line,"auto"wraps and adds an ellipsis only if text exceedslabel_max_lines, and"none"disables adaptive fitting. Explicit"shrink"uses internal-first feature placement and reduces the complete text only as far aslabel_min_size. Labels that still cannot fit use the existing adjacent/external placement or hiding policy, at their requested size. This choice uses feature placement rather than the external layout selected bylabel_layout; other fitting modes are unchanged.- label_max_lines
Positive integer, default 2. Maximum number of lines used by adaptive
"wrap"or"auto"fitting.- label_side
Character, default "outside". Which side of the arc the labels sit on.
"auto"keeps the strand-based placement (same as before);"outside"moves labels that would be inside the chord (where they can overlap the ribbons) to the outside of their arc;"inside"does the opposite. Labels moved to the other side are connected with a dashed leader line (seelabel_segment_linetype).- max_overlaps
Numeric, default Inf. Hide labels that still overlap more than this many other labels after repulsion (ggrepel-style decluttering). Use a finite value to clean up crowded plots.
- label_segment_overlap
Character, default
"fade". How portions of a leader line covered by another label are drawn:"fade"keeps them at reduced opacity,"clip"removes them, and"show"leaves the complete leader visible. This does not affect text wrapping, ellipsis or label hiding.- label_segment_overlap_alpha
Numeric in
[0, 1], default 0.18. Relative opacity applied only to covered leader-line portions whenlabel_segment_overlap = "fade".- label_segment_linetype
Character or numeric, default "auto". Leader-line linetype.
"auto"draws solid lines, except for labels that were moved to the other side of their arc, which are drawn dashed. Any other valid ggplot2 linetype (e.g."solid","dashed","dotted", or a numeric dash pattern) is used for all leader lines.- position
Position adjustment. Supply the same
position_feature_stack()used by a gene/feature layer when labels are drawn from separate data or without a geometry layer.- show.legend, inherit.aes
Standard ggplot2 layer arguments.
- label_min_size
Minimum text size in millimetres for explicit
label_fit = "shrink", default 1.5. It must not exceed the requested text size. Source text, requested/final size and fitting reason are retained in exported label geometry.- ...
Additional text styles and drawing options. Automatic layouts own rotation, offsets, orientation and overlap policy; use
geom_gene_label()for manuallabel_rotation,label_radial_offset,label_circum_offset,label_circum_limit,label_orientationorlabel_overlap. These manual controls are rejected here.
Details
The local outside/inside label organisation adapts concepts used by SnapGene and Geneious. ggchord keeps generic mode names and integrates those ideas into its own geometry system. See SnapGene feature labels and Geneious label options.
Low-level force, padding, orientation and segment arguments used by earlier
releases have been removed and now produce an error. Use
label_layout for automatic placement, or
geom_gene_label() for manual rotation and offsets.
Examples
Code
library(dplyr)
data(seq_data_example)
seqs <- seq_data_example |>
select(accver, length)
data(gene_data_example)
genes <- gene_data_example |>
transmute(accver, start, end, strand = source_strand, anno)
ggchord(seq_data = seqs, gene_data = genes) +
geom_seq() +
geom_gene() +
geom_gene_label_repel(label_wrap = 20)