Nuages de points et graphiques à bulles interactifs en R avec echarts4r

Ajoutez des infobulles au survol, le dimensionnement des points et la coloration par groupe à un nuage de points de style ggplot

Transformez un nuage de points ggplot2 statique en un nuage interactif avec echarts4r — survolez un point pour lire ses valeurs, dimensionnez les points selon une troisième variable pour créer un graphique à bulles, et colorez par groupe avec une série par groupe, le tout dans un flux de pipe familier. Chaque graphique se charge à la demande afin que la page reste rapide.

Date de publication

9 juillet 2026

Modifié

9 juillet 2026

AstucePoints clés
  • echarts4r enveloppe Apache ECharts, une bibliothèque de graphiques JavaScript libre et open source, dans un pipe R soigné — e_charts() démarre un graphique, e_scatter() ajoute les points.
  • Un nuage de points montre la relation entre deux variables numériques ; l’interactivité ajoute une infobulle au survol qui nomme chaque point, si bien qu’un nuage dense devient lisible.
  • Dimensionner les points selon une troisième variable transforme un nuage de points en graphique à bulles ; tracer une série par groupe (un e_scatter() distinct par catégorie) colore les points par groupe, ce qui vous permet de lire trois ou quatre variables sur une seule figure.
  • Sur cette page, chaque graphique interactif se cache derrière une image statique que vous cliquez pour charger — la lourde bibliothèque de graphiques ne se télécharge qu’à la demande, afin que la page respecte le budget de performance mobile.
  • L’image statique est un simple graphique ggplot2, produit par du code que vous pouvez copier et exécuter — la version interactive présente les mêmes données, rendues explorables.

Introduction

Vous réalisez déjà des nuages de points avec ggplot2 : geom_point(), un x et un y, et voilà. Ce graphique statique est parfait pour un rapport. Mais un nuage de points comportant trente points qui se chevauchent masque quelle voiture est laquelle — et un PNG statique ne peut pas vous le dire. C’est là qu’intervient echarts4r : il apporte Apache ECharts — une bibliothèque de graphiques mature, libre et open source — dans R avec un flux de travail en pipe qui vous semblera familier si vous connaissez le tidyverse. Survolez n’importe quel point et il nomme la voiture et affiche ses valeurs exactes.

Cette leçon construit le même nuage de points deux fois : d’abord comme figure ggplot2 statique (la base reproductible, et l’image à chargement rapide que vous voyez sur la page), puis comme widget echarts4r interactif que vous chargez d’un clic. Nous commençons par un nuage de points simple, ajoutons le dimensionnement des points pour créer un graphique à bulles, puis colorons les points par groupe.

NotePourquoi chaque graphique se charge au clic

Un widget ECharts interactif embarque environ 1 Mo de JavaScript et dessine sur un canvas HTML (une surface de dessin en pixels que le navigateur peint à la volée, plutôt qu’une image statique). En charger plusieurs à la fois ralentirait la page sur un téléphone et dégraderait son Largest Contentful Paint — LCP, le temps nécessaire à l’affichage du contenu principal. Ainsi, sur cette page, chaque graphique interactif est d’abord représenté par une image statique ; cliquer sur ▶ Load interactive chart insère le véritable widget echarts4r, entièrement interactif. Vous obtenez la vitesse d’une page statique et l’interactivité complète à la demande. Dans votre propre rapport ou application Shiny, il vous suffirait d’imprimer directement le widget — le code est identique.

La base statique : un nuage de points ggplot2

Nous allons représenter le poids des voitures en fonction de la consommation pour le jeu de données intégré mtcars. D’abord, préparez un petit data frame en R de base — pas besoin de dplyr — puis tracez le nuage de points avec ggplot2. Cette figure statique est la base reproductible, et sur cette page l’image principale que la page charge en premier.

library(ggplot2)

# Prepare a small data frame (base R — no dplyr needed)
cars <- data.frame(
  model = rownames(mtcars),
  wt    = mtcars$wt,      # weight, in 1000s of lbs
  mpg   = mtcars$mpg,     # miles per gallon
  hp    = mtcars$hp,      # horsepower
  cyl   = mtcars$cyl      # number of cylinders
)

ggplot(cars, aes(wt, mpg)) +
  geom_point(colour = "#3a86d4", size = 3) +
  labs(x = "Weight (1000 lbs)", y = "Miles per gallon",
       title = "Heavier cars use more fuel") +
  theme_minimal(base_size = 13)

A scatter plot of car weight against miles per gallon for 32 cars, azure points, showing a clear downward trend.

Les points utilisent l’azur de marque #3a86d4, et theme_minimal() conserve un rendu épuré. La tendance descendante est claire — les voitures plus lourdes parcourent moins de miles par gallon. Voilà un graphique prêt à publier. Maintenant, rendons-le explorable.

Votre premier nuage de points interactif

echarts4r lit un data frame : vous nommez la colonne x dans e_charts(), puis ajoutez les points avec e_scatter(). Le pipe (|>) enchaîne les étapes, exactement comme l’ajout de couches dans ggplot2. Nous assignons le graphique à scat plutôt que de l’imprimer directement, afin que la page reste légère — puis nous le chargeons derrière l’image statique ci-dessous.

library(echarts4r)

scat <- cars |>
  e_charts(wt) |>                          # the x axis
  e_scatter(mpg, bind = model) |>          # points from mpg; bind the model name for the tooltip
  e_color("#3a86d4") |>                    # brand azure, matching the static chart
  e_tooltip() |>                           # show a tooltip on hover
  e_x_axis(name = "Weight (1000 lbs)") |>
  e_y_axis(name = "MPG") |>
  e_legend(show = FALSE)                    # one series — no legend needed

Lisez le pipe de haut en bas : démarrez un graphique sur wt, ajoutez une série de points mpg, liez la colonne model pour que l’infobulle puisse nommer chaque voiture, colorez les points en azur, activez les infobulles au survol et étiquetez les axes. bind attache une étiquette à chaque point — la manière echarts4r de porter un identifiant qu’un graphique statique ne peut pas montrer. Maintenant, enregistrez le widget et affichez-le derrière une image statique.

Nuage de points du poids des voitures en fonction des miles par gallon montrant une tendance descendante. Survolez un point pour lire son poids exact et son MPG.

Survolez un point et ECharts affiche le nom de la voiture, son poids et son MPG dans une infobulle flottante — l’interaction que vous ne pouvez pas obtenir d’un PNG statique. Tout le reste, ce sont les mêmes données et la même palette azur.

Un graphique à bulles : dimensionner les points selon une troisième variable

Un nuage de points montre deux variables. Encodez-en une troisième dans la taille de chaque point et vous obtenez un graphique à bulles. Ici, nous laissons la puissance déterminer la taille des points : passez la colonne hp à l’argument size de e_scatter(). Les bulles plus grandes correspondent aux voitures plus puissantes.

bubble <- cars |>
  e_charts(wt) |>
  e_scatter(mpg, size = hp, bind = model) |>   # point size = horsepower
  e_color("#3a86d4") |>
  e_tooltip() |>
  e_x_axis(name = "Weight (1000 lbs)") |>
  e_y_axis(name = "MPG") |>
  e_legend(show = FALSE)

Le seul changement par rapport au graphique de base est size = hp à l’intérieur de e_scatter() — echarts4r met à l’échelle le rayon de chaque point selon sa puissance. Lisez trois variables à la fois : le poids en x, la consommation en y, et la puissance dans la taille des bulles. Le motif qui saute aux yeux, c’est que les voitures lourdes et gourmandes situées en bas à droite sont aussi les grosses et puissantes.

Graphique à bulles du poids en fonction du MPG avec la taille des points représentant la puissance. Les bulles plus grandes correspondent aux voitures plus puissantes ; survolez pour les valeurs exactes.

Survolez n’importe quelle bulle et l’infobulle indique la voiture, son poids, son MPG et sa puissance ensemble — l’encodage par la taille raconte l’histoire, et l’infobulle donne les chiffres exacts.

Colorer les points par groupe

Pour colorer un nuage de points selon une catégorie, donnez à chaque groupe sa propre série de points — un appel e_scatter() par groupe, chacun dans sa propre couleur. La manière R de base de le faire sans dplyr consiste à répartir les valeurs mpg en une colonne par nombre de cylindres : ifelse() conserve le MPG d’une voiture dans sa propre colonne et le fixe à NA partout ailleurs, et echarts4r ignore simplement les points NA. C’est le même idiome « colonnes larges, séries multiples » qu’utilisent les leçons barres et courbes.

# Colour by group the base-R way: one mpg column per cylinder count (shared x = wt).
# ifelse() masks the other groups to NA; echarts4r simply skips the NA points.
cars$`4 cylinders` <- ifelse(cars$cyl == 4, cars$mpg, NA)
cars$`6 cylinders` <- ifelse(cars$cyl == 6, cars$mpg, NA)
cars$`8 cylinders` <- ifelse(cars$cyl == 8, cars$mpg, NA)

grp <- cars |>
  e_charts(wt) |>
  e_scatter(`4 cylinders`, bind = model, symbol_size = 11) |>
  e_scatter(`6 cylinders`, bind = model, symbol_size = 11) |>
  e_scatter(`8 cylinders`, bind = model, symbol_size = 11) |>
  e_color(c("#440154", "#21908c", "#fde725")) |>   # viridis, colourblind-safe
  e_tooltip() |>
  e_x_axis(name = "Weight (1000 lbs)") |>
  e_y_axis(name = "MPG")

Voici l’idée. ifelse(cars$cyl == 4, cars$mpg, NA) construit une colonne 4 cylinders qui contient le MPG des voitures à quatre cylindres et NA pour toutes les autres ; les colonnes 6 cylinders et 8 cylinders font de même pour leurs groupes. Chaque colonne devient sa propre série e_scatter() sur l’axe wt partagé, si bien que chaque groupe est tracé séparément — e_color() attribue ensuite aux trois séries un triplet viridis à palette adaptée au daltonisme, et symbol_size fixe chaque point au même rayon (aucun dimensionnement accidentel). Le bénéfice : la couleur marque proprement le groupe, la légende permet au lecteur de cliquer sur un nombre de cylindres pour l’activer ou le désactiver, et les couleurs correspondent à l’image statique ci-dessous.

Nuage de points du poids en fonction du MPG avec des points colorés selon le nombre de cylindres. La couleur marque le nombre de cylindres ; survolez un point pour ses détails.

La couleur porte désormais le groupe : les voitures à quatre cylindres se regroupent en haut à gauche (légères, économes), les voitures à huit cylindres en bas à droite (lourdes, gourmandes). Comme chaque nombre de cylindres constitue sa propre série, la légende est interactive dans le graphique chargé — cliquez sur une entrée de légende pour activer ou désactiver ce groupe et isoler le motif qui vous intéresse.

Chaque graphique ci-dessus représente le même petit tableau dérivé de mtcars — une ligne par voiture, avec le poids, la consommation, la puissance et le nombre de cylindres :

First 8 cars: weight (1000 lbs), MPG, horsepower, and cylinders.
model wt mpg hp cyl 4 cylinders 6 cylinders 8 cylinders
Mazda RX4 2.620 21.0 110 6 NA 21.0 NA
Mazda RX4 Wag 2.875 21.0 110 6 NA 21.0 NA
Datsun 710 2.320 22.8 93 4 22.8 NA NA
Hornet 4 Drive 3.215 21.4 110 6 NA 21.4 NA
Hornet Sportabout 3.440 18.7 175 8 NA NA 18.7
Valiant 3.460 18.1 105 6 NA 18.1 NA
Duster 360 3.570 14.3 245 8 NA NA 14.3
Merc 240D 3.190 24.4 62 4 24.4 NA NA

Le tableau complet compte 32 lignes. wt est sur l’axe des x, mpg sur l’axe des y ; hp détermine la taille des bulles et cyl détermine la couleur du groupe.

Problèmes fréquents

Le graphique n’apparaît pas / la page n’affiche que l’image statique. C’est voulu sur ce site — cliquez sur ▶ Charger le graphique interactif et le véritable widget se charge. Dans votre propre document, print(scat) (ou en laissant scat être la dernière ligne d’un chunk) affiche le widget directement, sans image statique.

Mes groupes se chevauchent tous en une seule couleur. Chaque groupe a besoin de sa propre série e_scatter(). Répartissez la colonne y en une colonne par groupe avec ifelse() (la valeur du groupe là où elle appartient, NA ailleurs), ajoutez un appel e_scatter() par colonne, puis passez une couleur par série à e_color(c(...)). echarts4r ignore les points NA, si bien que chaque série ne trace que son propre groupe.

Mes points sont d’énormes taches. Le deuxième argument positionnel de e_scatter() est size, pas une colonne de couleur — donc e_scatter(mpg, cyl) associe cyl à la taille des points et vous obtenez des bulles géantes (et symbol_size ne remplacera pas une taille associée). Pour colorer par groupe à la place, ne passez pas la colonne de groupe à cet endroit : masquez les valeurs y dans des colonnes NA distinctes et donnez à chacune sa propre série e_scatter() avec un symbol_size fixe.

Mes bulles ont toutes la même taille. La variable de taille va à l’argument size de e_scatter()e_scatter(mpg, size = hp). Si vous définissez aussi symbol_size, il remplace le dimensionnement par un rayon fixe, ce qui est souhaitable pour un nuage de points de groupe coloré mais pas pour un graphique à bulles.

Questions fréquentes

Oui. echarts4r est publié sous la licence Apache 2.0 et enveloppe Apache ECharts, également sous Apache 2.0 — une licence permissive, libre et open source, sans frais par site ni frais commerciaux. Vous pouvez l’utiliser dans des rapports, des tableaux de bord et des sites publics sans licence payante.

Utilisez l’argument bind de e_scatter() : e_scatter(mpg, bind = model) attache la colonne model à chaque point, et e_tooltip() l’affiche ensuite. Sans bind, l’infobulle n’indique que les valeurs x et y.

Un nuage de points encode deux variables — une sur chaque axe. Un graphique à bulles en ajoute une troisième en l’associant à la taille des points. Dans echarts4r, vous passez de l’un à l’autre en passant une colonne à l’argument size de e_scatter().

Donnez à chaque groupe sa propre série de points. Répartissez la colonne y en une colonne par groupe avec ifelse() (la valeur là où la ligne appartient, NA sinon), ajoutez un appel e_scatter() par colonne, et passez une couleur par série à e_color(c(...)). Cela garde votre code pédagogique en R de base — sans pipe dplyr — tout en produisant un nuage de points proprement coloré avec une légende interactive.

ggiraph rend vos graphiques ggplot2 existants interactifs en les affichant en SVG, si bien que l’apparence est identique à ggplot2 et que le widget est léger. echarts4r dessine avec un moteur différent (Apache ECharts sur un canvas HTML) qui offre des interactions intégrées plus riches — filtrage visual-map, curseurs de zoom, transitions animées — au prix d’une charge JavaScript plus importante. Utilisez ggiraph lorsque vous voulez votre apparence ggplot de publication avec une interactivité légère ; optez pour echarts4r lorsque vous avez besoin de ces contrôles intégrés plus riches.

Testez vos connaissances

En utilisant le jeu de données intégré mtcars, préparez un data frame en R de base avec wt, mpg et qsec (temps sur le quart de mile), puis tracez un graphique à bulles interactif avec echarts4r : le poids sur l’axe des x, le MPG sur l’axe des y, et la taille des points déterminée par qsec. Colorez les points en azur, liez le nom du modèle pour l’infobulle et étiquetez les deux axes. Assignez-le à une variable et imprimez-le pour le visualiser.

Construisez le data frame avec data.frame(model = rownames(mtcars), wt = mtcars$wt, mpg = mtcars$mpg, qsec = mtcars$qsec), puis enchaînez e_charts(wt) avec e_scatter(mpg, size = qsec, bind = model). Définissez la couleur avec e_color("#3a86d4") et l’infobulle avec e_tooltip().

library(echarts4r)
cars <- data.frame(
  model = rownames(mtcars),
  wt    = mtcars$wt,
  mpg   = mtcars$mpg,
  qsec  = mtcars$qsec
)

cars |>
  e_charts(wt) |>
  e_scatter(mpg, size = qsec, bind = model) |>
  e_color("#3a86d4") |>
  e_tooltip() |>
  e_x_axis(name = "Weight (1000 lbs)") |>
  e_y_axis(name = "MPG")

Passer qsec à size met à l’échelle le rayon de chaque point selon le temps sur le quart de mile ; bind = model permet à l’infobulle de nommer chaque voiture.

Vérification rapide. Vous voulez colorer un nuage de points selon la transmission (am, où 0 = automatique et 1 = manuelle). En utilisant l’approche R de base, sans dplyr, de cette leçon, combien d’appels e_scatter() écrivez-vous, et qu’est-ce qui alimente chacun ?

Deux appels e_scatter() — un par groupe. Construisez deux colonnes masquées par NA, par exemple cars$Automatic <- ifelse(cars$am == 0, cars$mpg, NA) et cars$Manual <- ifelse(cars$am == 1, cars$mpg, NA), puis ajoutez e_scatter(Automatic, symbol_size = 11) et e_scatter(Manual, symbol_size = 11). Passez deux couleurs à e_color(c(...)) et chaque série ne trace que son propre groupe.

Conclusion

echarts4r transforme un nuage de points familier en un graphique explorable : e_charts() définit l’axe des x, e_scatter() ajoute les points, et un court pipe ajoute des infobulles, le dimensionnement des points pour un graphique à bulles, et une série par groupe pour la coloration par groupe. L’image statique ggplot2 garde la page rapide ; un clic révèle le graphique interactif complet. Chaque résultat de cette page a été produit par le code montré — copiez n’importe quel bloc et exécutez-le pour les reproduire.

Leçons connexes

Cette page vous a-t-elle été utile ?

Prouvez que vous savez le faire. Maîtrisez toute la série echarts4r — suivez votre parcours, construisez des projets et obtenez un certificat.

Commencer gratuitement →

Passez à Pro — Prova illimité sur vos propres données et un certificat vérifiable qui atteste la compétence.

dès 15 $/mois facturé annuellement

Passer à Pro →

✓ Vous êtes Pro — continuez. The runtime is the judge.

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN

Réutilisation

Citation

BibTeX
@online{2026,
  author = {},
  title = {Nuages de points et graphiques à bulles interactifs en R avec
    echarts4r},
  date = {2026-07-09},
  url = {https://www.datanovia.com/learn/data-visualization/echarts4r/interactive-scatter-plots},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
“Nuages de points et graphiques à bulles interactifs en R avec echarts4r.” 2026. July 9. https://www.datanovia.com/learn/data-visualization/echarts4r/interactive-scatter-plots.