Je suis convaincu que la visualisation de données est la meilleure façon de présenter un reporting descriptif et analytique sur un jeu de données. J'adore la dataviz : elle permet souvent de raconter toute une histoire sur un seul écran — selon la complexité des données, bien sûr. Si vous lisez ce tutoriel, vous connaissez sans doute le package ggplot2 dans R, idéal pour produire de superbes graphiques d'analyse, mais qui manque parfois de dynamisme.
Revenons à Highcharter : c'est un wrapper R pour la bibliothèque JavaScript Highcharts et ses modules.
Les principaux atouts de ce package :
Vous pouvez créer une grande variété de graphiques avec un style homogène : nuage de points, bulles, séries temporelles, cartes de chaleur, treemaps, diagrammes en barres, etc.
Il prend en charge différents objets R.
Il prend en charge les graphiques Highstock et les choroplèthes.
Il propose une syntaxe avec pipes, plébiscitée par les utilisateurs et développeurs R.
Un large choix de thèmes au rendu soigné.
Passons à la pratique et créons quelques visualisations avec Highcharter en nous appuyant sur ces fonctionnalités :
Créer des graphiques de base avec la fonction hchart
hchart est une fonction générique qui prend un objet en entrée et renvoie un objet highcharter. Plusieurs fonctions se comportent de manière similaire à celles du package ggplot2 :
hchart fonctionne comme qplot de ggplot2.
hc_add_series rappelle les fonctions geom_* de ggplot2.
hcaes s'apparente à aes de ggplot2.
Choisissons un jeu de données. Nous allons utiliser le dataset Pokémon inclus dans le package Highcharter. Jetons-y un œil.
pokemon%>%
count(type_1)%>%
arrange(n)%>%
hchart(type ="bar", hcaes(x = type_1, y = n))Propulsé par
Vous obtenez ainsi un diagramme en barres par type_1 de Pokémon.
Si vous préférez un histogramme (colonnes), il suffit de changer le type en column.
pokemon%>%
count(type_1)%>%
arrange(n)%>%
hchart(type ="column", hcaes(x = type_1, y = n))Propulsé par
Treemap
pokemon%>%
count(type_1)%>%
arrange(n)%>%
hchart(type ="treemap", hcaes(x = type_1, value = n, color = n))Propulsé par
On peut aussi utiliser hc_add_series pour tracer le graphique. Cette fonction permet d'ajouter ou de retirer des séries d'un objet highchart.
Nuage de points
highchart()%>%
hc_add_series(pokemon,"scatter", hcaes(x = height, y = weight))Propulsé par
La différence majeure entre les fonctions geom_ de ggplot2 et hc_add_series, c'est qu'avec hc_add_series il faut préciser les données et les esthétiques à chaque ajout, alors qu'avec ggplot2 vous pouvez définir ces éléments dans une couche, puis empiler plusieurs geoms qui réutiliseront les mêmes données et esthétiques.
Un exemple parlant ci-dessous avec le dataset diamonds de ggplot2.
data(diamonds, package ="ggplot2")
set.seed(123)
data <- sample_n(diamonds,300)
modlss <- loess(price ~ carat, data = data)
fit <- arrange(augment(modlss), carat)
highchart()%>%
hc_add_series(data, type ="scatter",
hcaes(x = carat, y = price, size = depth, group = cut))%>%
hc_add_series(fit, type ="line", hcaes(x = carat, y = .fitted),
name ="Fit", id ="fit")%>%
hc_add_series(fit, type ="arearange",
hcaes(x = carat, low = .fitted -2*.se.fit,
high = .fitted +2*.se.fit),
linkedTo ="fit")Propulsé par
Dans cet exemple, le graphique combine trois séries : nuage de points, courbe et zone d'incertitude.
Reproduisons un développement JavaScript Highcharts en R avec hc_add_series.
highchart()%>%
hc_chart(type ="area")%>%
hc_title(text ="Historic and Estimated Worldwide Population Distribution by Region")%>%
hc_subtitle(text ="Source: Wikipedia.org")%>%
hc_xAxis(categories = c("1750","1800","1850","1900","1950","1999","2050"),
tickmarkPlacement ="on",
title = list(enabled =FALSE))%>%
hc_yAxis(title = list(text ="Percent"))%>%
hc_tooltip(pointFormat = "<span style=\"color:{series.color}\">{series.name}</span>:<b>{point.percentage:.1f}%</b>({point.y:,.0f} millions)<br/>",
shared =TRUE)%>%
hc_plotOptions(area = list(
stacking ="percent",
lineColor ="#ffffff",
lineWidth =1,
marker = list(
lineWidth =1,
lineColor ="#ffffff")))%>%
hc_add_series(name ="Asia", data = c(502,635,809,947,1402,3634,5268))%>%
hc_add_series(name ="Africa", data = c(106,107,111,133,221,767,1766))%>%
hc_add_series(name ="Europe", data = c(163,203,276,408,547,729,628))%>%
hc_add_series(name ="America", data = c(18,31,54,156,339,818,1201))%>%
hc_add_series(name ="Oceania", data = c(2,2,2,6,13,30,46))Propulsé par
En comparant, on voit comment chaque bloc de code JavaScript est transposé en fonctions R chaînées. Remarquez par exemple l'argument pointFormat de hctooltip, identique au format utilisé en JavaScript. Pour en savoir plus, consultez cette documentation.
Highstock
Highstock permet de créer des graphiques pour l'analyse financière et des séries temporelles. Il fonctionne très bien avec la bibliothèque quantmod, et il est facile de tracer des symboles, puis d'ajouter d'autres séries via hc_add_series.
x <- getSymbols("GOOG", auto.assign =FALSE)
hchart(x)Propulsé par
Ici, nul besoin de code supplémentaire : hchart gère très bien l'objet xts et offre une vue dynamique des données. Utilisez le zoom pour explorer des segments plus fins et affiner l'analyse.
Utilisons maintenant hc_add_series.
y <- getSymbols("AMZN", auto.assign =FALSE)
highchart(type ="stock")%>%
hc_add_series(x)%>%
hc_add_series(y, type ="ohlc")Propulsé par
Comme vous le voyez, la visualisation s'adapte efficacement à de gros volumes de données.
N'hésitez pas à tester d'autres objets xts.
Highmaps
La façon la plus simple de tracer une carte avec highcharter est d'utiliser la fonction hcmap. Sélectionnez une URL depuis la collection highmaps et utilisez-la comme carte dans hcmap. La carte est alors téléchargée et injectée en argument mapdata.
Traçons la carte de l'Inde.
hcmap("https://code.highcharts.com/mapdata/countries/in/in-all.js")%>%
hc_title(text ="India")Propulsé par
Ceci est une carte simple. Et si on la convertissait en carte choroplèthe ?
Chaque carte téléchargée depuis la collection Highcharts possède des clés pour joindre des données. Deux fonctions permettent d'identifier les régions et les clés de jointure :
download_map_data : télécharge les données geojson depuis la collection Highcharts.
get_data_from_map : récupère les propriétés de chaque région de la carte, notamment les clés de jointure.
mapdata <- get_data_from_map(download_map_data("https://code.highcharts.com/mapdata/countries/in/in-all.js"))
glimpse(mapdata)Propulsé par
Créons un graphique avec drill-down vers d'autres graphiques pour une analyse plus fine. Le code sera plus clair si vous êtes à l'aise avec les listes en R.
df <- data_frame(
name = c("Animals","Fruits","Cars"),
y = c(5,2,4),
drilldown = tolower(name))
ds <- list_parse(df)
names(ds)<-NULL
hc <- highchart()%>%
hc_chart(type ="column")%>%
hc_title(text ="Basic drilldown")%>%
hc_xAxis(type ="category")%>%
hc_legend(enabled =FALSE)%>%
hc_plotOptions(
series = list(
boderWidth =0,
dataLabels = list(enabled =TRUE)))%>%
hc_add_series(
name ="Things",
colorByPoint =TRUE,
data = ds
)
dfan <- data_frame(
name = c("Cats","Dogs","Cows","Sheep","Pigs"),
value = c(4,3,1,2,1))
dffru <- data_frame(
name = c("Apple","Organes"),
value = c(4,2))
dfcar <- data_frame(
name = c("Toyota","Opel","Volkswage"),
value = c(4,2,2))
second_el_to_numeric <-function(ls){
map(ls,function(x){
x[[2]]<- as.numeric(x[[2]])
x
})}
dsan <- second_el_to_numeric(list_parse2(dfan))
dsfru <- second_el_to_numeric(list_parse2(dffru))
dscar <- second_el_to_numeric(list_parse2(dfcar))
hc %>%
hc_drilldown(
allowPointDrilldown =TRUE,
series = list(
list(
id ="animals",
data = dsan
),
list(
id ="fruits",
data = dsfru
),
list(
id ="cars",
data = dscar
)))Propulsé par
tm$tm <- tm$tm %>%
tbl_df()%>%
left_join(pokemon %>% select(type_1, type_2, color_f)%>% distinct(), by = c("type_1","type_2"))%>%
left_join(pokemon %>% select(type_1, color_1)%>% distinct(), by = c("type_1"))%>%
mutate(type_1 = paste0("Main ", type_1),
color = ifelse(is.na(color_f), color_1, color_f))
highchart()%>%
hc_add_series_treemap(tm, allowDrillToNode =TRUE,
layoutAlgorithm ="squarified")Propulsé par
Ajoutons la fonctionnalité d'export des données.
pokemon%>%
count(type_1)%>%
arrange(n)%>%
hchart(type ="bar", hcaes(x = type_1, y = n, color = type_1))%>%
hc_exporting(enabled =TRUE)Propulsé par
Pour finir, ajoutons quelques thèmes.
pokemon%>%
count(type_1)%>%
arrange(n)%>%
hchart(type ="bar", hcaes(x = type_1, y = n, color = type_1))%>%
hc_exporting(enabled =TRUE)%>%
hc_add_theme(hc_theme_chalk())Propulsé par
Vous pouvez en apprendre bien plus ici : c'est une bibliothèque complète pour Highcharter. Je partage aussi l'un de mes graphiques préférés réalisé sur un jeu de données météo. L'argument polar, lorsqu'il est réglé sur TRUE, change totalement la donne.
data("weather")
x <- c("Min","Mean","Max")
y <- sprintf("{point.%s}", c("min_temperaturec","mean_temperaturec","max_temperaturec"))
tltip <- tooltip_table(x, y)
hchart(weather, type ="columnrange",
hcaes(x = date, low = min_temperaturec, high = max_temperaturec,
color = mean_temperaturec))%>%
hc_chart(polar =TRUE)%>%
hc_yAxis( max =30, min =-10, labels = list(format ="{value} C"),
showFirstLabel =FALSE)%>%
hc_xAxis(
title = list(text =""), gridLineWidth =0.5,
labels = list(format ="{value: %b}"))%>%
hc_tooltip(useHTML =TRUE, pointFormat = tltip,
headerFormat = as.character(tags$small("{point.x:%d %B, %Y}")))Propulsé par
Apprenez l'essentiel de l'architecture d'un entrepôt de données, des composants clés aux meilleures pratiques, pour construire un système de données évolutif et efficace !
À l'aube de la nouvelle année scolaire, DataCamp Classrooms est plus motivé que jamais pour démocratiser l'apprentissage des données, avec plus de 7 650 nouveaux Classrooms ajoutés au cours des 12 derniers mois.
Gagnez en confiance dans la régression par les MCO en maîtrisant ses fondements théoriques. Découvrez comment réaliser des mises en œuvre simples dans Excel, R et Python.
Apprenez à utiliser JSON en Python, notamment la sérialisation, la désérialisation, le formatage, l'optimisation des performances, la gestion des API, ainsi que les limites et les alternatives de JSON.
Je suis convaincu que la visualisation de données est la meilleure façon de présenter un reporting descriptif et analytique sur un jeu de données. J'adore la dataviz : elle permet souvent de raconter toute une histoire sur un seul écran — selon la complexité des données, bien sûr. Si vous lisez ce tutoriel, vous connaissez sans doute le package ggplot2 dans R, idéal pour produire de superbes graphiques d'analyse, mais qui manque parfois de dynamisme.
Revenons à Highcharter : c'est un wrapper R pour la bibliothèque JavaScript Highcharts et ses modules.
Les principaux atouts de ce package :
Passons à la pratique et créons quelques visualisations avec Highcharter en nous appuyant sur ces fonctionnalités :
Créer des graphiques de base avec la fonction hchart
hchart est une fonction générique qui prend un objet en entrée et renvoie un objet highcharter. Plusieurs fonctions se comportent de manière similaire à celles du package ggplot2 :
qplotde ggplot2.geom_*de ggplot2.aesde ggplot2.Choisissons un jeu de données. Nous allons utiliser le dataset Pokémon inclus dans le package Highcharter. Jetons-y un œil.
Traçons un diagramme en barres.
Vous obtenez ainsi un diagramme en barres par type_1 de Pokémon.
Si vous préférez un histogramme (colonnes), il suffit de changer le type en column.
Treemap
On peut aussi utiliser hc_add_series pour tracer le graphique. Cette fonction permet d'ajouter ou de retirer des séries d'un objet highchart.
Nuage de points
La différence majeure entre les fonctions geom_ de ggplot2 et hc_add_series, c'est qu'avec hc_add_series il faut préciser les données et les esthétiques à chaque ajout, alors qu'avec ggplot2 vous pouvez définir ces éléments dans une couche, puis empiler plusieurs geoms qui réutiliseront les mêmes données et esthétiques.
Un exemple parlant ci-dessous avec le dataset diamonds de ggplot2.
Dans cet exemple, le graphique combine trois séries : nuage de points, courbe et zone d'incertitude.
Reproduisons un développement JavaScript Highcharts en R avec hc_add_series.
En comparant, on voit comment chaque bloc de code JavaScript est transposé en fonctions R chaînées. Remarquez par exemple l'argument pointFormat de hctooltip, identique au format utilisé en JavaScript. Pour en savoir plus, consultez cette documentation.
Highstock
Highstock permet de créer des graphiques pour l'analyse financière et des séries temporelles. Il fonctionne très bien avec la bibliothèque
quantmod, et il est facile de tracer des symboles, puis d'ajouter d'autres séries viahc_add_series.Ici, nul besoin de code supplémentaire : hchart gère très bien l'objet xts et offre une vue dynamique des données. Utilisez le zoom pour explorer des segments plus fins et affiner l'analyse.
Utilisons maintenant hc_add_series.
Comme vous le voyez, la visualisation s'adapte efficacement à de gros volumes de données.
N'hésitez pas à tester d'autres objets xts.
Highmaps
La façon la plus simple de tracer une carte avec highcharter est d'utiliser la fonction
hcmap. Sélectionnez une URL depuis la collection highmaps et utilisez-la comme carte dans hcmap. La carte est alors téléchargée et injectée en argument mapdata.Traçons la carte de l'Inde.
Ceci est une carte simple. Et si on la convertissait en carte choroplèthe ?
Chaque carte téléchargée depuis la collection Highcharts possède des clés pour joindre des données. Deux fonctions permettent d'identifier les régions et les clés de jointure :
Amusez-vous à enrichir les cartes et choroplèthes avec hc_add_series. Pour plus de détails et d'exemples, consultez cette ressource.
Plug-ins
Testons maintenant quelques plug-ins proposés par highcharter : regroupements, drill-down, export, impression des données et de superbes thèmes.
Regroupons les données du dataset mpg. Pour une meilleure lisibilité, nous créons ici une liste qui catégorise les données par constructeur.
Créons un graphique avec drill-down vers d'autres graphiques pour une analyse plus fine. Le code sera plus clair si vous êtes à l'aise avec les listes en R.
Ajoutons du drill-down sur d'autres graphiques.
Ajoutons la fonctionnalité d'export des données.
Vous pouvez en apprendre bien plus ici : c'est une bibliothèque complète pour Highcharter. Je partage aussi l'un de mes graphiques préférés réalisé sur un jeu de données météo. L'argument
polar, lorsqu'il est réglé sur TRUE, change totalement la donne.Pour aller plus loin sur la visualisation de données avec R, suivez le cours Data Visualization with ggplot2 (Part 1) de DataCamp et consultez notre R Formula Tutorial.