Une histoire des cartes Polar Area / Coxcomb / Rose et comment les créer dans le ggplot2 de R.

J'ai vu cette carte référencée par plusieurs noms différents : zone polaire, rose des vents, (seulement) Rose, Coxcomb ou même carte " Consulants ". Je commencerai par décrire l'historique de la carte et certaines des différences que j'ai observées en parcourant le Web. Ignorez ceci jusqu'en bas pour une explication technique sur la façon de créer quelque chose de similaire dans le package ggplot2 de R.

 

Commençons par le nom. Le projet Data Viz regroupe la carte Polar Area, Coxcomb & Rose en utilisant la description suivante :

 

"Le graphique de la zone polaire est similaire à un graphique à secteurs habituel, sauf que les secteurs sont des angles égaux et diffèrent plutôt dans la mesure où chaque secteur s'étend depuis le centre du cercle."

 

Andy Kirk, auteur de Visualizing Data , les catégorise de la même manière, mais en excluant Rose Chart et en incluant Circular Barplot. Sa définition est légèrement plus détaillée, comme ci-dessous :

 

« Un graphique polaire montre les valeurs de trois mesures quantitatives différentes ou plus dans le même affichage. Il utilise une disposition radiale (circulaire) comprenant plusieurs secteurs à angles égaux comme des tranches de pizza, une pour chaque mesure. Contrairement à la carte radar (qui utilise la position le long d'une échelle), la carte polaire utilise la variation de la taille des zones de secteur pour représenter les valeurs quantitatives. Il s'agit essentiellement d'un graphique à barres tracé radialement.

 

Ainsi, le graphique est un croisement entre un graphique à barres (utilisant la longueur comme caractéristique pré-attentive) et un graphique à secteurs (de nature radiale, des segments plus larges en haut, plus fins au centre, c'est-à-dire des coordonnées polaires). Cela nous aide à comprendre la forme du graphique comme moyen de représenter les données, mais ne nous dit toujours pas pourquoi ce type de graphique est si gourmand lorsqu'il s'agit d'avoir des noms différents !

 

Pour y répondre, nous allons jeter un coup d'œil aux premières observations de ce thème dans la nature. Selon la plupart des sources, il est apparu pour la première fois lorsque Florence Nightingale l'a utilisé dans ses diagrammes statistiques pendant la guerre de Crimée pour montrer les causes de mortalité au cours des mois de l'année (voir ci-dessous).

 
 

Pour cette raison, on comprend pourquoi on l'appelle parfois «Nightingale's Rose» - les segments qui s'étendent vers l'extérieur ressemblent à la forme d'une rose. En variante, la «rose des vents» adopte un format similaire, mais les segments sont utilisés de manière directionnelle pour indiquer la direction et l'intensité du vent en fonction des points cardinaux. Dans le domaine de Football Analytics, les roses des vents ont été utilisées pour indiquer la direction et le volume des passes effectuées à partir d'une position ou d'un joueur particulier.

 

Cependant, Florence Nightingale n'a jamais qualifié la carte de Rose elle-même, ce nom est venu plus tard. Contrairement à la croyance populaire, elle ne les a pas non plus qualifiées de cartes « Coxcomb ». Une explication plus détaillée peut être trouvée ici , mais il semblerait que le nom 'Coxcomb' ait filtré à travers le temps à la suite d'un malentendu !

 

Qu'est-ce qu'un coxcomb? Il peut faire référence à une forme de fleur, mais, compte tenu de la nature visuelle du thème, le malentendu a probablement été fait en le comparant à une autre définition : la crête rouge au sommet de la tête d'un coq (voyez par vous-même !)

 

Essentiellement, bien que Nightingale ait utilisé le mot coxcomb dans son rapport, elle ne faisait pas référence au tableau lui-même, mais au positionnement du diagramme et du rapport qui l'accompagne en tête d'un rapport beaucoup plus volumineux : The Royal Commission Report.

 
 

Nous avons maintenant couvert la Rose & le Coxcomb, ce qui ne laisse que la carte de la zone polaire et la carte du consultant (certes moins connue et qui ne sera pas couverte dans cet article).

 

En mathématiques, le système de coordonnées polaires est un système de coordonnées bidimensionnel dans lequel chaque point d'un plan est déterminé par une distance à partir d'un point de référence et un angle à partir d'une direction de référence. Le point de référence est appelé le pôle et le rayon du pôle dans la direction de référence est l'axe polaire. Cela diffère du système de coordonnées auquel la plupart d'entre nous sont habitués; le système de coordonnées "cartésien". Cela inclut nos coordonnées x,y standard dans une orientation linéaire, verticale/horizontale.

Même graphique utilisant les coordonnées cartésiennes (x, y)

L'exemple de droite est exactement le même graphique que l'original, mais sans l'instruction coord_polar() dans R. Vous pouvez voir pourquoi Andy Kirk décrit le graphique comme "en fait un graphique à barres tracé radialement". En utilisant les coordonnées polaires, vous enroulez l'ensemble du graphique autour d'un point central afin qu'il se déploie vers l'extérieur en taille croissante.

 

Là où il diffère du graphique à barres radiales, c'est dans la façon dont il augmente en largeur à mesure que vous vous éloignez du centre, créant des coins ou des tranches de pizza par opposition aux barres rectangulaires. C'est de là que vient la partie "Zone" de la carte de la zone polaire. Je pense que cela rend les graphiques de zones polaires plus adaptés à une comparaison rapide entre les catégories, comme nous l'avons fait dans la comparaison Arsenal, car la visualisation utilise à la fois la longueur et la largeur pour représenter les données. Comme il y a une plus grande surface couverte dans la visualisation, mon œil est capable de remarquer plus rapidement les valeurs supérieures et inférieures et de faire cette comparaison entre les différents joueurs.

 

Donc, en conclusion, pour la majorité des cas d'utilisation, la carte de la zone polaire devrait être le nom de référence de cette carte. Les graphiques Rose/Wind Rose sont appropriés lorsque la visualisation utilise la connaissance pré-acquise d'une boussole/direction spécifique, pour souligner le mouvement sur la longueur de chaque segment. Le graphique Coxcomb , comme nous l'avons appris, a été nommé ainsi par erreur, bien qu'au moins il maintienne le lien avec le concepteur original du graphique - Florence Nightingale. En fin de compte, comme dans la plupart des cas de langage, tant que votre public comprend de quoi vous parlez, peu importe comment vous l'appelez !

 

J'espère que vous avez trouvé cela utile/intéressant ! Suivez @ sportschord sur twitter/linkedin pour tout ce qui concerne R, data viz, Sports & Tableau.

Comment faire le graphique de la zone polaire en R

 

La deuxième partie de ce blog expliquera maintenant comment créer le graphique de la zone polaire dans R. Cela suppose une connaissance de base de R, RStudio et comment installer des packages. Le code complet pour créer un graphique de zone polaire relativement non formaté est ci-dessous. Voir ci-dessous pour une description ligne par ligne. Remplacez les métriques colorées en gras par votre propre bloc de données.

 

ggplot( data , aes(x= Metric , y= Length )) +

geom_col(fill = "rouge", alpha=1, largeur=1)+

geom_hline(yintercept = seq(0, 100, by = 10),

couleur = "gris", taille = 1) +

geom_vline(xintercept = seq(.5, 16.5, by = 1),

couleur = "gris", taille = 1) +

coord_polaire()+

facet_wrap(vars( Player ))

 
 

ggplot (données, aes (x = métrique, y = longueur)) +

  • Cette ligne appelle le package ggplot2, lie vos données à l'intrigue et vous permet de sélectionner "l'esthétique" (aes) qui sera utilisée pour la visualisation.

  • Dans ce cas, nous voulons notre métrique sur l'axe des x et la valeur sur l'axe des y. N'oubliez pas que nous créons un histogramme jusqu'à la commande coord_polar.

  • Utilisez le signe '+' pour enchaîner les lignes ensemble.

geom_col(fill = "rouge", alpha=1, largeur=1)+

  • Cela appelle la fonction geom_col, nécessaire pour créer notre graphique à colonnes/barres verticales.

  • L'argument fill définit la couleur de remplissage des colonnes. Les codes hexadécimaux/RVB peuvent être utilisés ici.

  • L'alpha définit la transparence (0=transparent, 1= opaque).

  • La largeur définit l'écart entre les colonnes (0=pas de barre, 1= se touchant côte à côte).

geom_hline(yintercept = seq(0, 100, by = 10),

couleur = "gris", taille = 1) +

geom_vline(xintercept = seq(.5, 16.5, by = 1),

couleur = "gris", taille = 1) +

  • Ces lignes ajoutent quelques lignes de grille pratiques à notre graphique.

  • geom_hline définit les lignes de grille circulaires, geom_vline définit les lignes de délimitation des segments.

  • seq() crée une séquence entre deux nombres, l'argument 'by' indique l'écart.

  • color définit la couleur de la ligne.

  • size définit la largeur de la ligne.

 

coord_polaire()+

  • La magie opère ici. Passez des coordonnées cartésiennes aux coordonnées polaires.

facet_wrap(vars(Joueur))

  • Utilisez la fonction "facette" pour obtenir de petits multiples par une métrique particulière. En savoir plus à ce sujet ici .

 

Toutes les autres mises en forme des graphiques, telles que l'ajout de titres, de sous-titres, de couleurs d'arrière-plan et de cases pour les facettes, peuvent être réalisées dans le thème(). Un exemple du thème que j'ai créé pour mon graphique Arsenal se trouve ci-dessous.

 

theme(axis.text.x = element_text(size=25,colour = "#063672" ,

angle = seq(-20,-340,length.out = 9),vjust = 100),

axe.texte.y = element_blank(),

axis.ticks.y = element_blank(),

axis.ticks.x = element_line(taille = 2,couleur = "noir",type de ligne = 1),

légende.position = "aucune",

strip.background = element_rect(couleur = "noir", remplissage = "#063672"),

strip.text.x = element_text(colour = "white", face = "plain",size = 45),

panel.border = element_rect(couleur = "noir",taille = 1,fill=NA),

panel.spacing = unit(2, "lignes"),

plot.title = element_text(family = "URWGothic",taille = 80),

plot.subtitle = element_text(family = "URWGothic",taille = 30),

plot.caption = element_text(family = "URWGothic",taille = 30),

plot.margin = unit(c(1,1,1,1), "cm"),

panel.grid = element_blank()

)

Retour au blog

Laisser un commentaire