Construire un Marimekko horizontal dans Tableau Software

J’adore les Marimekko !

Je sais, ces mots sonnent parfaitement geek, j’assume. Simples en apparence, ils encodent néanmoins plus d’informations que nos petits camemberts ou barres traditionnelles. Il existe plusieurs techniques pour les construire dans Tableau Software. Je vais vous donner ma solution, ce n’est peut être pas la plus optimale mais elle permet de passer d’une version verticale à une version horizontale en un clic ! Je l’ai récemment utilisé pour visualiser les pertes humaines lors de la première guerre mondiale, par pays engagés.

English Version

Lien vers la visualisation

C’est quoi un Marimekko ?

Le graphique “Marimekko” est une sorte de barres empilées 100% (100% stacked bar chart) qui permet d’encoder une information supplémentaire : la représentativité des catégories. Des barres empilées 100% traditionnelles permettent de visualiser les parts relatives à l’intérieur de chaque catégorie sans donner d’information sur la représentativité des catégories. Dans le Marimekko vertical usuel, l’axe horizontal encode la part de chaque catégorie à l’ensemble, l’axe vertical la part de chaque mesure à l’intérieur de chaque catégorie. Plus la surface est grande, plus la “population” de la catégorie/mesure est élevée.

Un Marimekko traditionnel

Une version alternative consiste à pivoter cette visualisation. Cela permet entre autres d’annoter et de mettre des textes plus efficacement. Si je reprends la visualisation de la première guerre mondiale :

  • en hauteur : la population (nombre d’habitant en 1914) pour chaque pays engagés dans le conflit
  • en largeur : la part de pertes, de blessés et non blessés/pertes pour chacun de ces pays.

Efficace non ? Qu’est ce qu’on dit ?

Arigato Marimekko !

Les données

Vos données d’entrées doivent être formatées de la sorte :

Onglet “Data”

Ces données de test sont disponibles sur ce lien: 

https://drive.google.com/file/d/1bwBzzzrcGBcyoVlLuV4xBIE3I7P1OqPv/view?usp=sharing

Vous commencez à avoir l’habitude, je vais encore utiliser les polygones. Je vais construire chaque rectangle du Marimekko en calculant leurs coordonnées en me basant sur le champ Value.

Meilleur Gif du monde.

Il me faut donc densifier la donnée d’entrée, et donc la dupliquer grâce à un produit cartésien sur un jeu de donnée modèle. Encore une fois, pour améliorer les performances, je vous conseille d’utiliser un jeu de donnée d’entrée filtré et agrégé au maximum.

Onglet “Model”

Le champ Link me permet de réaliser le produit cartésien. Pour chaque ligne initiale, j’ai donc maintenant 4 points, prêt à accueillir les coordonnées X et Y des 4 points de chaque rectangle.

Le fameux produit cartésien.

Les calculs

Les choses sérieuses commencent, préparons les champs intermédiaires utiles à nos coordonnées finales.

Vous pouvez également voir la liste des calculs en téléchargement la viz Tableau Public : https://public.tableau.com/views/greatified_com-HorizontalMarimekko/Marimekko?:embed=y&:display_count=yes&publish=yes

1.Value : valeur à utiliser pour chaque catégorie et mesure (redéfinition de l’agrégation suite au produit cartésien)

{FIXED [Category],[Value Name]: min([Value]) }

2.Value Total : somme des valeurs pour chaque catégorie

{FIXED [Category]: sum([1. Value]) }

3.% Value Total : part de chaque catégorie à l’ensemble

sum([2. Value Total])/TOTAL(sum([2. Value Total]))

4.% Running Value Total : somme cumulée de la part de chaque catégorie. Sera utile pour calculer la position suivante.

RUNNING_SUM([3. % Value Total])

5.% Value : part de chaque mesure dans chaque catégorie

sum([1. Value])/sum([2. Value Total])

6.% Running Value : somme cumulée de la part de chaque mesure dans chaque catégorie. Sera utile pour calculer la position suivante.

RUNNING_SUM([5. % Value])

7.index :  numéro d’identifiant de la catégorie

INDEX()

8.Nb Category :  nombre de catégories

AVG({COUNTD([Category])})

9.index value : numéro d’identifiant de la mesure

INDEX()

@X : position des points sur l’axe horizontal (pour construire les rectangles !)

IF ATTR([Point])=1 THEN [6. % Running Value]-[5. % Value]
ELSEIF ATTR([Point])=2 THEN [6. % Running Value]
ELSEIF ATTR([Point])=3 THEN [6. % Running Value]
ELSEIF ATTR([Point])=4 THEN [6. % Running Value]-[5. % Value]
END

@Y : position des points sur l’axe vertical (pour construire les rectangles !)

(IF ATTR([Point])=1 THEN [4. % Running Value Total]-[3. % Value Total]
ELSEIF ATTR([Point])=2 THEN [4. % Running Value Total]-[3. % Value Total]
ELSEIF ATTR([Point])=3 THEN [4. % Running Value Total]
ELSEIF ATTR([Point])=4 THEN [4. % Running Value Total]
END
+[7. index][P_Gap])/(1+[P_Gap][8. Nb Category])

Un paramètre P_Gap est utilisé dans cette dernière formule afin d’ajouter l’espace nécessaire pour afficher les libellés entre chaque rectangle.

Paramètre P_Gap

La visualisation

Pour construire la visualisation, rien de plus “simple” ! Je place le champ Point dans Path, Category dans Detail, Value Name dans Color. Je place @X dans Columns et @Y dans Rows. J’utilise le type de repère Polygon. Avant d’obtenir le visuel attendu, il faut définir les Calculs de Tables de ces derniers champs.

Paramétrage de la visualisation

Pour définir les Calculs de Table, clic droit sur @X et sur @Y, puis définir les bons niveaux pour chaque mesure utilisée.

Une dernière étape consiste à réutiliser le champ @Y en axe double, raccourci Ctrl+Glisser/Déposer dans Rows puis clic droit Axe Double sans oublier de synchroniser les axes. Il nous servira à afficher les libellés sur un type de repère Circle ou Shape.

Paramétrage axe double @Y

@display_label : Un nouveau champ a été créé afin d’uniquement afficher les libellé sur chaque premier point par catégorie.

IF attr([Point])=1 and [9. index value]=1 then 1 else 0 end

Utilisation de @display_label

On devrait y être, vous n’avez plus qu’a formater la visualisation finale comme bon vous semble !

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s