Visualiser des données génomiques avec ggbio : ggplot2 pour le génome
Idéogrammes, modèles de gènes, pistes d’alignement et de couverture, et graphiques circulaires avec ggbio
Visualisez des données génomiques avec le package ggbio — une grammaire ggplot2 pour le génome. Tracez des idéogrammes, des modèles de gènes, des pistes d’alignement et de couverture, des pistes de variants, des figures empilées multi-pistes et des graphiques de génome circulaires (style Circos). Un compagnon ggplot2 natif de Gviz pour la visualisation génomique en R.
- ggbio apporte la grammaire ggplot2 au génome.
ggbios’appuie sur ggplot2 : un seul appelautoplot()transforme un objet génomique — un idéogramme, un modèle de gène, un fichier BAM, un fichier VCF — en une piste à laquelle vous pouvez ajouter des couches. - Chaque objet génomique a une piste.
Ideogram()dessine un chromosome,autoplot()dessine des modèles de gènes (à partir d’unOrganismDb/TxDb), la séquence de référence (à partir d’unBSgenome), les alignements et la couverture (à partir d’un BAM), et les variants (à partir d’un VCF). - Empilez les pistes avec
tracks(). Combinez un idéogramme, un modèle de gène, la couverture et les variants en une seule figure alignée, multi-panneaux, partageant un axe x génomique. circle()construit des graphiques de style Circos. Superposez des anneaux d’idéogramme, d’échelle, d’étiquettes et de mutations pour une vue d’ensemble du génome entier.- ggbio est un package hérité peu maintenu. Les figures présentées ici sont de véritables sorties du code montré sur la version de génome indiquée ; pour un tracé de pistes génomiques activement maintenu, préférez Gviz ou des outils plus récents.
Introduction
Les données génomiques se lisent presque toujours sous forme de piste : un panneau horizontal tracé selon des coordonnées génomiques — un modèle de gène, un empilement de lectures, une ligne de variants, une courbe de couverture — plusieurs d’entre elles empilées pour que vous puissiez aligner les caractéristiques par position. ggbio est le package qui dessine ces pistes avec la grammaire des graphiques ggplot2 : au lieu d’une fonction de tracé sur mesure par type de données, une seule méthode autoplot() transforme un objet génomique Bioconductor en une couche ggplot que vous pouvez étendre, thématiser et combiner comme n’importe quelle autre.
Cette leçon est un tour d’horizon de ce que ggbio dessine, dans l’ordre où vous construisez une vue de navigateur : un idéogramme (un schéma d’un chromosome et de son motif de bandes colorées, les cytobandes), un modèle de gène (la structure exon–intron des transcrits), une piste de séquence de référence, une piste d’alignement à partir d’un fichier BAM (Binary Alignment Map) avec des résumés de couverture et de mésappariements, une piste de variants à partir d’un fichier VCF (Variant Call Format), la fonction tracks() qui les empile, et enfin des vues d’ensemble circulaires (style Circos) du génome entier. Chaque fonctionnalité est présentée sous forme du code que vous exécutez ainsi que de la figure qu’il produit. Consultez la page Bioconductor de ggbio pour la référence complète.
ggbio et les méta-packages d’annotation sur lesquels il s’appuie pour les modèles de gènes (Homo.sapiens / la famille OrganismDb) sont peu maintenus et peuvent échouer à s’installer ou à se charger sur une version récente de Bioconductor. Chaque figure ci-dessous est une véritable sortie du code montré, rendue sur la version du génome humain hg19 (GRCh37) ; considérez cette page comme une référence illustrée de la grammaire ggbio plutôt qu’un script garanti de fonctionner sur le Bioconductor d’aujourd’hui. Pour un tracé de pistes génomiques activement maintenu, préférez Gviz (la leçon sœur de cette série) ou des outils plus récents tels que ggcoverage et plotgardener. Les concepts — pistes, modèles de gènes, couverture, vues d’ensemble circulaires — se transposent directement.
Avant de commencer
ggbio et ses dépendances d’annotation proviennent de Bioconductor, installées avec BiocManager :
if (!requireNamespace("BiocManager", quietly = TRUE)) install.packages("BiocManager")
BiocManager::install(c(
"ggbio",
"biovizBase", # sample genomic data used below
"Homo.sapiens", # OrganismDb gene models (hg19)
"TxDb.Hsapiens.UCSC.hg19.knownGene", # TxDb gene models (hg19)
"BSgenome.Hsapiens.UCSC.hg19", # reference sequence (hg19)
"VariantAnnotation" # reads VCF files
))Les packages d’annotation sont figés sur hg19. Pour travailler sur la version actuelle, remplacez-les par leurs équivalents hg38 (BSgenome.Hsapiens.UCSC.hg38, TxDb.Hsapiens.UCSC.hg38.knownGene) — le code ggbio est identique ; seule la source d’annotation change. Si vous n’avez pas encore configuré R pour Bioconductor, consultez Configurer R pour le RNA-seq.
Dessiner un idéogramme
Un idéogramme est un schéma d’un chromosome entier montrant ses cytobandes — les bandes claires et sombres qu’un chromosome coloré révèle au microscope, les repères de coordonnées classiques. Ideogram() en construit un pour une version de génome ; ggbio fournit les données de cytobandes pour les versions courantes (hg19, hg18, mm10, mm9), de sorte que rien n’est téléchargé à la volée. Par défaut, il dessine le chromosome 1 :
library(ggbio)
p.ideo <- Ideogram(genome = "hg19") # chr1 by default (subchr = "chr1")
p.ideo
Comme l’idéogramme est un objet ggplot, vous mettez en évidence une région en ajoutant un xlim() avec un locus GRanges (genomic ranges) — ici une fenêtre de 10 Mb sur le chromosome 2. Le marqueur rouge indique où cette fenêtre se situe sur le chromosome entier :
library(GenomicRanges)
p.ideo + xlim(GRanges("chr2", IRanges(1e8, 1e8 + 1e7)))
Les arguments color et fill de Ideogram() modifient les couleurs du contour et de la surbrillance si vous souhaitez les accorder à une palette maison.
Dessiner un modèle de gène
Un modèle de gène est la structure exon–intron des transcrits d’un gène : la CDS (coding sequence), les UTR (untranslated regions), les exons et les introns entre eux. ggbio construit une piste de modèle de gène de trois façons :
- à partir d’un objet
OrganismDb(recommandé — il peut étiqueter les transcrits par symbole de gène) ; - à partir d’un objet
TxDb(transcript database) (pas d’étiquettes de symbole de gène — il utilise les identifiants de transcrits) ; - à partir d’un
GRangesListque vous analysez vous-même à partir d’un fichier GTF (la solution de repli flexible lorsqu’aucun package d’annotation n’existe ; voir la vignette ggbio).
À partir d’un objet OrganismDb
Homo.sapiens est un méta-package OrganismDb qui relie plusieurs ressources d’annotation entre elles, de sorte que ggbio peut étiqueter les transcrits par symbole de gène. Choisissez d’abord un locus : chargez la table genesymbol (un gène par ligne) depuis biovizBase, prenez les gènes BRCA1 et NBR1, et regroupez-les en une seule plage englobante avec range(). Ensuite, autoplot() dessine chaque transcrit dans cette fenêtre :
library(ggbio)
library(Homo.sapiens)
# gene coordinates: a GRanges, one gene per row
data(genesymbol, package = "biovizBase")
wh <- genesymbol[c("BRCA1", "NBR1")]
wh <- range(wh, ignore.strand = TRUE) # one range spanning both genes
# draw every transcript in the window
p.txdb <- autoplot(Homo.sapiens, which = wh)
p.txdb
Chaque rangée est un transcrit ; les boîtes épaisses sont les exons, les lignes fines les introns. La géométrie d’intron par défaut est une simple ligne — remplacez-la par des chevrons fléchés (qui indiquent le sens de la transcription) avec gap.geom :
autoplot(Homo.sapiens, which = wh, gap.geom = "chevron")
La voie du symbole de gène OrganismDb (Homo.sapiens ci-dessus) est l’élément le plus susceptible de casser sur une installation Bioconductor actuelle — ces méta-packages sont peu maintenus. Les figures présentées ici sont de véritables sorties sur hg19. Si Homo.sapiens ne se charge pas, repliez-vous sur la voie TxDb ci-dessous (étiquettes d’identifiant de transcrit, mais une dépendance plus robuste), ou tracez les modèles de gènes avec le GeneRegionTrack de Gviz à la place.
Les couleurs et les étiquettes sont des arguments : label.color définit la couleur de l’étiquette de transcrit, color le contour, et fill le remplissage des exons.
autoplot(Homo.sapiens, which = wh,
label.color = "black", color = "brown", fill = "brown")L’étiquette elle-même est flexible. columns() liste les colonnes d’annotation disponibles, et names.expr compose une étiquette à partir de n’importe laquelle d’entre elles — ici le nom du gène et le terme GO (Gene Ontology) :
columns(Homo.sapiens)
autoplot(Homo.sapiens, which = wh,
columns = c("GENENAME", "GO"),
names.expr = "GENENAME::GO")
À partir d’un objet TxDb
Un TxDb ne contient aucune information de symbole de gène, de sorte que les transcrits sont étiquetés par identifiant de transcrit à la place. L’appel autoplot() est par ailleurs identique — le type d’objet détermine le reste :
library(TxDb.Hsapiens.UCSC.hg19.knownGene)
txdb <- TxDb.Hsapiens.UCSC.hg19.knownGene
autoplot(txdb, which = wh)
Dessiner la séquence de référence
Une piste de référence montre la séquence réelle du génome. Chargez un BSgenome (la séquence complète du génome sous forme de package) et tracez-la avec autoplot() sur la même fenêtre. ggbio utilise un zoom sémantique : la façon dont la séquence est dessinée dépend de votre niveau de zoom. zoom() prend un facteur — au-dessus de 1 dézoome, en dessous de 1 zoome — et ggbio change de géométrie à mesure que les bases deviennent lisibles : une barre colorée en vue dézoomée, puis des segments, des rectangles, et enfin les lettres A/C/G/T lorsqu’une poignée de bases remplit le panneau.
library(BSgenome.Hsapiens.UCSC.hg19)
bg <- BSgenome.Hsapiens.UCSC.hg19
p.bg <- autoplot(bg, which = wh)
p.bg # zoomed out: a coloured density bar
p.bg + zoom(1/100) # segments
p.bg + zoom(1/1000) # rectangles, one per base
p.bg + zoom(1/2500) # the base letters themselves



Pour outrepasser le seuil automatique et forcer une géométrie à n’importe quel niveau de zoom, passez geom explicitement :
autoplot(bg, which = resize(wh, width = width(wh) / 2000), geom = "segment")Dessiner une piste d’alignement à partir d’un fichier BAM
Un fichier BAM (Binary Alignment Map) contient les lectures de séquençage alignées sur le génome. autoplot() accepte un chemin BAM (indexé) ou un objet BamFile ; passez which pour ne diffuser qu’une seule région. Ici, nous utilisons un BAM d’exemple fourni avec biovizBase et restreignons la fenêtre au chromosome 17 avec keepSeqlevels() :
fl.bam <- system.file("extdata", "wg-brca1.sorted.bam", package = "biovizBase")
wh <- keepSeqlevels(wh, "chr17") # BRCA1 is on chr17
autoplot(fl.bam, which = wh)
Résumé des mésappariements
Pour coder par couleur les endroits où les lectures divergent de la référence — le signal brut d’un variant possible — passez le BSgenome comme bsgenome et définissez stat = "mismatch". ggbio dessine un diagramme en barres dont les couleurs marquent la proportion de bases mésappariées par position :
p.mis <- autoplot(fl.bam, bsgenome = bg, which = wh, stat = "mismatch")
p.mis
Distribution de la couverture
Pour une vue d’ensemble du fichier entier plutôt qu’une seule fenêtre, method = "estimate" dessine la distribution de couverture estimée — la profondeur de lecture à travers le génome. which accepte aussi de simples noms de chromosomes, et la valeur cachée ..coverage.. vous permet de transformer la profondeur dans aes() (une échelle logarithmique ici empêche les pics profonds d’aplatir tout le reste) :
# overall estimated coverage
autoplot(fl.bam, method = "estimate")
# selected chromosomes, log-transformed depth
autoplot(fl.bam, method = "estimate",
which = paste0("chr", 17:18),
aes(y = log(..coverage..)))

Dessiner une piste de variants à partir d’un fichier VCF
Un fichier VCF (Variant Call Format) liste les variants génomiques — les SNP (single-nucleotide polymorphisms) et les courts indels. Lisez-le avec VariantAnnotation::readVcf(), convertissez-le en VRanges (un GRanges conscient des variants), et renommez son chromosome pour correspondre à la convention chr17. Cette piste est également sensible au zoom sémantique — dézoomée, c’est un résumé de type densité ; zoomée, chaque variant devient une marque étiquetée :
library(VariantAnnotation)
fl.vcf <- system.file("extdata", "17-1409-CEU-brca1.vcf.bgz", package = "biovizBase")
vcf <- readVcf(fl.vcf, "hg19")
vr <- as(vcf[, 1:3], "VRanges")
vr <- renameSeqlevels(vr, c("17" = "chr17"))
gr17 <- GRanges("chr17", IRanges(41234400, 41234530)) # a small dense region
p.vr <- autoplot(vr, which = wh)
p.vr # zoomed out
p.vr + xlim(gr17) # rectangles in a narrow window
p.vr + xlim(gr17) + zoom() # zoomed in: labelled variants


Vous pouvez outrepasser la géométrie directement plutôt que de vous fier au seuil de zoom :
autoplot(vr, which = wh, geom = "rect", arrow = FALSE)
Empiler les pistes avec tracks()
Le bénéfice d’une seule grammaire pour chaque type de données : tracks() empile les panneaux que vous avez construits ci-dessus en une seule figure alignée partageant un axe x génomique. Donnez à chaque panneau un nom et une hauteur relative, ajoutez un xlim() pour recentrer la vue, et appliquez un thème de piste :
gr17 <- GRanges("chr17", IRanges(41234415, 41234569))
tks <- tracks(
p.ideo, mismatch = p.mis, dbSNP = p.vr, ref = p.bg, gene = p.txdb,
heights = c(2, 3, 3, 1, 4)
) + xlim(gr17) + theme_tracks_sunset()
tks
Dessiner une vue d’ensemble circulaire (style Circos)
Un graphique circulaire (le style Circos) dispose le génome entier sous forme d’anneau, idéal pour montrer d’un coup d’œil des événements à l’échelle du génome — variants structuraux, mutations somatiques. Deux règles importent : les seqlengths, seqlevels et les noms de chromosomes doivent correspondre entre toutes les couches, et vous devez partir du propre constructeur ggbio() de ggbio (et non ggplot()) pour que les couches circle() sachent qu’elles sont polaires.
Chargez les données d’exemple — des objets GRanges pré-construits de biovizBase :
data("CRC", package = "biovizBase")
head(hg19sub) # a trimmed hg19 chromosome setcircle() ajoute un anneau par appel, de l’intérieur vers l’extérieur. Commencez par un anneau d’idéogramme, un anneau d’échelle et un anneau d’étiquettes de chromosomes :
p <- ggbio() +
circle(hg19sub, geom = "ideo", fill = "gray70") + # ideogram ring
circle(hg19sub, geom = "scale", size = 2) + # scale ring
circle(hg19sub, geom = "text", aes(label = seqnames), vjust = 0, size = 3) # chromosome labels
p
Ajoutez des données sous forme d’anneaux supplémentaires. Ici, un anneau rect dessine les mutations somatiques (mut.gr) à l’extérieur de l’idéogramme :
head(mut.gr) # somatic mutations as a GRanges
p <- ggbio() +
circle(mut.gr, geom = "rect", color = "steelblue") + # mutation ring
circle(hg19sub, geom = "ideo", fill = "gray70") +
circle(hg19sub, geom = "scale", size = 2) +
circle(hg19sub, geom = "text", aes(label = seqnames), vjust = 0, size = 3)
p
Problèmes fréquents
Homo.sapiens (ou un autre package d’annotation) échoue à s’installer ou à se charger. Ces méta-packages OrganismDb sont peu maintenus et sont souvent en retard sur la version actuelle de Bioconductor. Repliez-vous sur la voie TxDb (TxDb.Hsapiens.UCSC.hg19.knownGene) pour une dépendance plus robuste, ou tracez les modèles de gènes avec Gviz à la place. Si vous n’avez besoin de l’annotation que pour une région spécifique, analyser un GTF en un GRangesList et le tracer contourne aussi entièrement le méta-package.
Le graphique circulaire génère une erreur ou apparaît vide. Deux causes habituelles : vous êtes parti de ggplot() au lieu du constructeur ggbio() de ggbio (semblable à ggplot()), ou les seqlengths / seqlevels / noms de chromosomes diffèrent entre la couche d’idéogramme et la couche de données. Réduisez chaque couche au même ensemble de chromosomes (comme le fait hg19sub) et vérifiez que les noms correspondent avant d’ajouter des anneaux.
Rien ne s’affiche pour une région BAM ou VCF. La fenêtre et le fichier doivent utiliser le même nommage de chromosomes — 17 contre chr17 ne renverra silencieusement aucune caractéristique. Utilisez renameSeqlevels() / keepSeqlevels() pour les aligner, comme dans les sections sur l’alignement et les variants ci-dessus.
Questions fréquentes
ggbio est un package Bioconductor qui dessine des données génomiques avec la grammaire des graphiques ggplot2. Une seule méthode autoplot() rend des idéogrammes, des modèles de gènes, la séquence de référence, les alignements et la couverture BAM, et les variants VCF sous forme de pistes ggplot que vous pouvez superposer et combiner — et tracks() les empile en une seule figure alignée.
Les deux dessinent des pistes de style navigateur de génome en R. ggbio étend ggplot2, de sorte que les pistes sont des objets ggplot que vous construisez avec des couches + ; Gviz possède ses propres classes de pistes et son API plotTracks(). Gviz est plus activement maintenu, donc pour des figures de pistes en production c’est le choix par défaut le plus sûr ; ggbio est attrayant lorsque vous pensez déjà en ggplot2 et souhaitez des vues d’ensemble circulaires (style Circos).
Appelez autoplot() sur un objet d’annotation sur une fenêtre : autoplot(Homo.sapiens, which = wh) pour un OrganismDb (avec des étiquettes de symbole de gène), ou autoplot(txdb, which = wh) pour un TxDb (étiquettes d’identifiant de transcrit). wh est un GRanges donnant la région — construisez-le à partir de genesymbol[c("BRCA1", "NBR1")] et range().
Partez du constructeur ggbio() de ggbio et ajoutez une couche circle() par anneau, de l’intérieur vers l’extérieur — par ex. circle(gr, geom = "ideo") pour l’idéogramme, circle(gr, geom = "scale"), circle(gr, geom = "text") pour les étiquettes, et circle(data, geom = "rect") pour un anneau de données. Chaque couche doit partager les mêmes noms de chromosomes et seqlengths.
ggbio et les méta-packages OrganismDb (comme Homo.sapiens) sont peu maintenus et peuvent échouer à s’installer ou à se charger sur une version récente de Bioconductor. Les figures de cette page sont de véritables sorties sur hg19 ; considérez-la comme une référence illustrée. Pour une alternative maintenue, utilisez Gviz, ggcoverage, ou plotgardener.
Testez vos connaissances
Vous disposez d’un panneau de modèle de gène p.txdb et d’un panneau de mésappariements p.mis pour la région BRCA1 (construits dans les sections ci-dessus). Empilez-les en une seule figure avec le modèle de gène en bas et une hauteur deux fois supérieure à celle du panneau de mésappariements, centrée sur la fenêtre GRanges("chr17", IRanges(41234415, 41234569)).
tracks() prend des panneaux nommés de haut en bas et un vecteur heights de tailles relatives ; ajoutez un xlim() avec un GRanges d’une seule ligne pour recentrer la vue.
gr17 <- GRanges("chr17", IRanges(41234415, 41234569))
tracks(
mismatch = p.mis,
gene = p.txdb,
heights = c(1, 2) # gene model twice as tall
) + xlim(gr17)Les panneaux sont dessinés dans l’ordre où vous les listez (de haut en bas), donc mismatch en premier place le modèle de gène en bas ; heights = c(1, 2) rend le panneau de gène deux fois plus grand que le panneau de mésappariements ; xlim(gr17) restreint les deux à la fenêtre.
A. TxDb B. OrganismDb (par ex. Homo.sapiens) C. BSgenome
B — OrganismDb. Un OrganismDb tel que Homo.sapiens relie les ressources d’annotation entre elles, de sorte que autoplot() peut étiqueter les transcrits par symbole de gène. Un TxDb (A) n’a aucune information de symbole et se rabat sur les identifiants de transcrits ; un BSgenome (C) contient la séquence de référence, pas les modèles de gènes.
Conclusion
ggbio applique une seule idée — la grammaire ggplot2 — à chaque type de données génomiques. Ideogram() dessine un chromosome, autoplot() dessine les modèles de gènes à partir d’un OrganismDb/TxDb, la séquence de référence à partir d’un BSgenome, les alignements et la couverture à partir d’un BAM, et les variants à partir d’un VCF ; tracks() empile ces panneaux sur un axe génomique partagé ; et circle() construit des vues d’ensemble circulaires du génome entier. Comme chaque piste est un objet ggplot, vous zoomez, naviguez, recolorez et combinez avec les couches + familières. La seule réserve concerne la maintenance : ggbio et ses packages d’annotation OrganismDb sont hérités, donc pour les figures de pistes dont vous dépendez au quotidien, tournez-vous vers Gviz — les concepts se transfèrent directement.
Leçons connexes
- Visualisation de pistes génomiques avec Gviz — l’alternative activement maintenue pour les modèles de gènes, la couverture et les pistes de données. · GRanges et GRangesList — les objets d’intervalles (
GRanges,VRanges) à partir desquels chaque piste ggbio est construite. · Formats de fichiers bio-informatiques — ce que contiennent les fichiers BAM, VCF et GFF et en quoi leurs coordonnées diffèrent. - Où cela s’inscrit : Données génomiques en R — la série complète (intervalles, visualisation de pistes génomiques et contrôle qualité des lectures). · Bio-informatique — le pilier : RNA-seq, single-cell et workflows omiques reproductibles.
Cette leçon est une référence illustrée : chaque figure est une véritable sortie du code montré, rendue avec ggbio sur la version de génome hg19. Comme ggbio et ses packages d’annotation sont hérités, la page est constituée d’images plutôt que d’un bac à sable interactif — copiez n’importe quel bloc et exécutez-le dans votre propre R (avec les packages de la section Avant de commencer installés) pour reproduire ces résultats. The runtime is the judge.
Réutilisation
Citation
@online{2026,
author = {},
title = {Visualiser des données génomiques avec ggbio : ggplot2 pour
le génome},
date = {2026-07-08},
url = {https://www.datanovia.com/learn/bioinformatics/genomics/ggbio-visualize-genomic-data},
langid = {fr}
}