Diagramme Sankey

Présentation

Un diagramme Sankey est une visualisation utilisée pour illustrer un flux d'un ensemble de valeurs à un autre. Les éléments connectés sont appelés nœuds et les connexions appelées liens. Les clés Sankey sont idéales lorsque vous souhaitez afficher un mappage plusieurs à plusieurs entre deux domaines (par exemple, des universités et des étudiants) ou plusieurs chemins à travers un ensemble d'étapes (par exemple, Google Analytics les utilise pour afficher le flux de trafic entre les pages et les autres pages de votre site Web).

Pour les plus curieux, elles portent le nom du capitaine Sankey, qui a créé un diagramme d'efficacité d'une machine à vapeur utilisant des flèches dont la largeur est proportionnelle à la perte de chaleur.

Remarque:Le diagramme de Sankey est peut-être en train de faire l'objet de révisions importantes dans les futures versions de Google Charts.

Les diagrammes Sankey sont affichés dans le navigateur à l'aide du format SVG ou VML, selon ce qui convient au navigateur de l'utilisateur. Le code de mise en page Sankey de Google est dérivé du code de mise en page Sankey de D3.

Remarque:Les diagrammes de Sankey Google ne sont pas disponibles dans Microsoft Internet Explorer 8 et les versions antérieures.

Exemple simple

Supposons que vous ayez deux catégories, A et B, qui sont reliées à trois autres catégories, X, Y et Z. Certaines de ces connexions sont plus lourdes que d'autres. Par exemple, la connexion de B à X et celle de Y est beaucoup plus épaisse.


Essayez de pointer sur l'un des liens pour mettre en évidence la connexion.

Pour créer un diagramme de Sankey, fournissez un ensemble de lignes, chacune contenant des informations sur une connexion : "De", "Vers" et "Pondération". Utilisez ensuite la méthode google.visualization.Sankey() pour initialiser le graphique, puis la méthode draw() pour l'afficher:

<html>
  <head>
    <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
    <script type="text/javascript">
      google.charts.load('current', {'packages':['sankey']});
      google.charts.setOnLoadCallback(drawChart);

      function drawChart() {
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'From');
        data.addColumn('string', 'To');
        data.addColumn('number', 'Weight');
        data.addRows([
          [ 'A', 'X', 5 ],
          [ 'A', 'Y', 7 ],
          [ 'A', 'Z', 6 ],
          [ 'B', 'X', 2 ],
          [ 'B', 'Y', 9 ],
          [ 'B', 'Z', 4 ]
        ]);

        // Sets chart options.
        var options = {
          width: 600,
        };

        // Instantiates and draws our chart, passing in some options.
        var chart = new google.visualization.Sankey(document.getElementById('sankey_basic'));
        chart.draw(data, options);
      }
    </script>
  </head>
  <body>
    <div id="sankey_basic" style="width: 900px; height: 300px;"></div>
  </body>
</html>

Remarque : Évitez les cycles de données dans vos données. Si A est relié à lui-même, ou à B, qui renvoie à C, qui renvoie à A, votre graphique ne s'affichera pas.

Sankeys à plusieurs niveaux

Vous pouvez créer un graphique Sankey avec plusieurs niveaux de connexions:

Les graphiques Sankey permettent d'ajouter des niveaux supplémentaires si nécessaire, en les mettant automatiquement en page. Voici le code complet pour le graphique ci-dessus:

<html>
<body>
 <script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>

<div id="sankey_multiple" style="width: 900px; height: 300px;"></div>

<script type="text/javascript">
  google.charts.load("current", {packages:["sankey"]});
  google.charts.setOnLoadCallback(drawChart);
   function drawChart() {
    var data = new google.visualization.DataTable();
    data.addColumn('string', 'From');
    data.addColumn('string', 'To');
    data.addColumn('number', 'Weight');
    data.addRows([
       [ 'Brazil', 'Portugal', 5 ],
       [ 'Brazil', 'France', 1 ],
       [ 'Brazil', 'Spain', 1 ],
       [ 'Brazil', 'England', 1 ],
       [ 'Canada', 'Portugal', 1 ],
       [ 'Canada', 'France', 5 ],
       [ 'Canada', 'England', 1 ],
       [ 'Mexico', 'Portugal', 1 ],
       [ 'Mexico', 'France', 1 ],
       [ 'Mexico', 'Spain', 5 ],
       [ 'Mexico', 'England', 1 ],
       [ 'USA', 'Portugal', 1 ],
       [ 'USA', 'France', 1 ],
       [ 'USA', 'Spain', 1 ],
       [ 'USA', 'England', 5 ],
       [ 'Portugal', 'Angola', 2 ],
       [ 'Portugal', 'Senegal', 1 ],
       [ 'Portugal', 'Morocco', 1 ],
       [ 'Portugal', 'South Africa', 3 ],
       [ 'France', 'Angola', 1 ],
       [ 'France', 'Senegal', 3 ],
       [ 'France', 'Mali', 3 ],
       [ 'France', 'Morocco', 3 ],
       [ 'France', 'South Africa', 1 ],
       [ 'Spain', 'Senegal', 1 ],
       [ 'Spain', 'Morocco', 3 ],
       [ 'Spain', 'South Africa', 1 ],
       [ 'England', 'Angola', 1 ],
       [ 'England', 'Senegal', 1 ],
       [ 'England', 'Morocco', 2 ],
       [ 'England', 'South Africa', 7 ],
       [ 'South Africa', 'China', 5 ],
       [ 'South Africa', 'India', 1 ],
       [ 'South Africa', 'Japan', 3 ],
       [ 'Angola', 'China', 5 ],
       [ 'Angola', 'India', 1 ],
       [ 'Angola', 'Japan', 3 ],
       [ 'Senegal', 'China', 5 ],
       [ 'Senegal', 'India', 1 ],
       [ 'Senegal', 'Japan', 3 ],
       [ 'Mali', 'China', 5 ],
       [ 'Mali', 'India', 1 ],
       [ 'Mali', 'Japan', 3 ],
       [ 'Morocco', 'China', 5 ],
       [ 'Morocco', 'India', 1 ],
       [ 'Morocco', 'Japan', 3 ]
    ]);

    // Set chart options
    var options = {
      width: 600,
    };

    // Instantiate and draw our chart, passing in some options.
    var chart = new google.visualization.Sankey(document.getElementById('sankey_multiple'));
    chart.draw(data, options);
   }
</script>
</body>
</html>

Contrôler les couleurs

Les graphiques Sankey permettent de définir des couleurs personnalisées pour les nœuds et les liens. Des palettes de couleurs personnalisées peuvent être attribuées aux nœuds et aux liens à l'aide des options colors (sankey.node.colors et sankey.link.colors, respectivement). Différents modes de coloration peuvent également leur être attribués à l'aide de l'option colorMode.

Si les couleurs ne sont pas personnalisées, elles utilisent par défaut la palette Material standard.

    var colors = ['#a6cee3', '#b2df8a', '#fb9a99', '#fdbf6f',
                  '#cab2d6', '#ffff99', '#1f78b4', '#33a02c'];

    var options = {
      height: 400,
      sankey: {
        node: {
          colors: colors
        },
        link: {
          colorMode: 'gradient',
          colors: colors
        }
      }
    };

Vous pouvez contrôler la couleur des liens, des nœuds et des libellés à l'aide d'options de configuration. Ici, nous en sélectionnons trois ayant la même teinte, mais des luminosités différentes:

Voici comment se présentent ces options:

    var options = {
      width: 600,
      sankey: {
        link: { color: { fill: '#d799ae' } },
        node: { colors: [ '#a61d4c' ],
                label: { color: '#871b47' } },
      }
    };

Vous pouvez également contrôler la transparence des liens à l'aide de l'option sankey.link.color.fillOpacity:

    var options = {
      width: 600,
      sankey: {
        link: { color: { fill: '#d799ae', fillOpacity: 0.8 } },
        node: { colors: [ '#a61d4c' ],
                label: { color: '#871b47' } },
      }
    };

Pour créer une bordure autour des liens, utilisez les options sankey.link.color.stroke et sankey.link.color.strokeWidth:

La couleur du trait peut être spécifiée au format RVB ou par nom anglais.

    var options = {
      width: 750,
      height: 400,
      sankey: {
        node: { colors: [ '#a61d4c' ] },
        link: { color: { stroke: 'black', strokeWidth: 1 } },
      }
    };

Personnaliser les libellés

Le texte des diagrammes de Sankey peut être personnalisé à l'aide de sankey.node.label.fontName et d'amis:

Voici le stanza d'options pour le graphique ci-dessus:

    var options = {
      width: 600,
      sankey: {
        node: { label: { fontName: 'Times-Roman',
                         fontSize: 14,
                         color: '#871b47',
                         bold: true,
                         italic: true } } },
    };

Vous pouvez ajuster la position des étiquettes par rapport aux nœuds à l'aide de l'option sankey.node.labelPadding:

Dans le graphique ci-dessus, nous avons ajouté 30 pixels de marge intérieure entre les étiquettes et les nœuds.

    var options = {
      width: 600,
      sankey: { node: { labelPadding: 30 } },
    };

Ajuster les nœuds

Vous pouvez contrôler la largeur des nœuds avec sankey.node.width:

Ci-dessus, nous définissons la largeur du nœud sur 2.

    var options = {
      width: 600,
      sankey: { node: { width: 2 } },
    };

Vous pouvez ajuster la distance entre les nœuds avec sankey.node.nodePadding:

Dans le graphique ci-dessus, nous avons défini sankey.node.nodePadding sur 80.

    var options = {
      width: 900,
      sankey: { node: { nodePadding: 80 } },
    };

Chargement...

Le nom du package google.charts.load est "sankey":

  google.charts.load("current" {packages: ["sankey"]});

Le nom de classe de la visualisation est google.visualization.Sankey:

  var visualization = new google.visualization.Sankey(container);

Format des données

Lignes:chaque ligne de la table représente une connexion entre deux étiquettes. La troisième colonne indique l'intensité de cette connexion et est reflétée par la largeur du chemin entre les étiquettes.

Columns:

  Colonne 0 Colonne 1 Colonne 2 ... Colonne N (facultative)
Objectif : Source Destination Valeur ... Rôles facultatifs
Type de données : chaîne chaîne Nombre ...
Rôle : domaine domaine Données ...
Rôles de colonne facultatifs:

Aucun contrôle

Aucun contrôle

Aucun contrôle

...

 

Options de configuration

Nom
forceIFrame

Dessine le graphique dans un cadre intégré. Notez que dans IE8, cette option est ignorée, car tous les graphiques IE8 sont dessinés dans des i-frames.

Type:booléen
Par défaut : "false"
taille

Hauteur du graphique, en pixels.

Type:nombre
Par défaut:hauteur de l'élément parent
sankey.iterations

Avec les Sankeys à plusieurs niveaux, il n'est parfois pas évident de déterminer où placer les nœuds pour une lisibilité optimale. Le moteur de mise en page D3 teste différentes dispositions de nœuds et s'arrête après sankey.iterations tentatives. Plus ce nombre est élevé, plus la mise en page des graphiques Sankey complexes est agréable, mais cela a un coût: les graphiques Sankey prennent plus de temps à s'afficher. À l'inverse, plus ce nombre est court, plus vos graphiques s'affichent rapidement.

Type:entier
Par défaut:32
sankey.link

Contrôle les attributs des connexions entre les nœuds. Actuellement, tous les attributs se rapportent à la couleur:

sankey: {
  link: {
    color: {
      fill: '#efd',     // Color of the link.
      fillOpacity: 0.8, // Transparency of the link.
      stroke: 'black',  // Color of the link border.
      strokeWidth: 1    // Thickness of the link border (default 0).
    },
    colors: [
      '#a6cee3',        // Custom color palette for sankey links.
      '#1f78b4',        // Nodes will cycle through this palette
      '#b2df8a',        // giving the links for that node the color.
      '#33a02c'
    ]
  }
}
      
Type:objet
Par défaut:null
sankey.link.colorMode

Définit un mode de couleur pour les liens entre les nœuds. Valeurs possibles :

  • 'source' : la couleur du nœud source est utilisée pour les liens vers tous les nœuds cibles.
  • 'target' : la couleur du nœud cible est utilisée pour le lien vers ses nœuds sources.
  • 'gradient' : le lien entre un nœud source et un nœud cible est coloré sous la forme d'un dégradé entre la couleur du nœud source et la couleur du nœud cible.
  • 'none' est l'option par défaut. Les couleurs des liens seront définies sur la valeur par défaut (ou sur une couleur spécifiée par les options sankey.link.color.fill et sankey.link.color.fillOpacity).

Cette option remplace sankey.link.color.

Type:chaîne
Par défaut : "none" (aucun)
sankey.node

Contrôle les attributs des nœuds (barres verticales entre les liens):

sankey: {
  node: {
    label: {
      fontName: 'Times-Roman',
      fontSize: 12,
      color: '#000',
      bold: true,
      italic: false
    },
    interactivity: true, // Allows you to select nodes.
    labelPadding: 6,     // Horizontal distance between the label and the node.
    nodePadding: 10,     // Vertical distance between nodes.
    width: 5,            // Thickness of the node.
    colors: [
      '#a6cee3',         // Custom color palette for sankey nodes.
      '#1f78b4',         // Nodes will cycle through this palette
      '#b2df8a',         // giving each node its own color.
      '#33a02c'
    ]
  }
}
      
Type:objet
Par défaut:null
sankey.node.colorMode

Définit un mode de couleur pour les nœuds Sankey. Valeurs possibles :

  • 'unique' : chaque nœud reçoit une couleur unique.
Type:chaîne
Par défaut : "unique" (unique).
Info-bulle

Objet avec des membres permettant de configurer divers éléments d'info-bulle. Pour spécifier les propriétés de cet objet, vous pouvez utiliser la notation littérale d'objet, comme indiqué ci-dessous:

{textStyle: {color: '#FF0000'}, showColorCode: true}
Type:objet
Par défaut:null
tooltip.isHtml

Si elle est définie sur "True", utilisez les info-bulles affichées en HTML (plutôt que SVG). Pour en savoir plus, consultez Personnaliser le contenu des info-bulles.

Remarque:La personnalisation du contenu de l'info-bulle HTML via le rôle de données des colonnes d'info-bulles n'est pas disponible pour la visualisation Graphique à bulles.

Type:booléen
Par défaut : "false"
tooltip.textStyle

Objet spécifiant le style de texte de l'info-bulle. L'objet a le format suivant:

{ color: <string>,
  fontName: <string>,
  fontSize: <number>,
  bold: <boolean>,
  italic: <boolean> }
    

color peut être n'importe quelle chaîne de couleur HTML, par exemple 'red' ou '#00cc00'. Voir également fontName et fontSize.

Type:objet
Par défaut: {color: 'black', fontName: <global-font-name>, fontSize: <global-font-size>}
largeur

Largeur du graphique, en pixels.

Type:nombre
Par défaut:largeur de l'élément parent

Méthodes

Méthode
draw(data, options)

Permet de dessiner le graphique. Le graphique n'accepte d'autres appels de méthode qu'après le déclenchement de l'événement ready. Extended description.

Return Type (Type renvoyé) : aucun
getBoundingBox(id)

Renvoie un objet contenant les valeurs gauche, supérieure, largeur et hauteur de l'élément de graphique id. Le format de id n'est pas encore documenté (il s'agit des valeurs renvoyées des gestionnaires d'événements), mais voici quelques exemples:

var cli = chart.getChartLayoutInterface();

Hauteur de la zone de graphique
cli.getBoundingBox('chartarea').height
Largeur de la troisième barre de la première série d'un graphique à barres ou à colonnes
cli.getBoundingBox('bar#0#2').width
Cadre de délimitation du cinquième coin d'un graphique à secteurs
cli.getBoundingBox('slice#4')
Cadre de délimitation des données d'un graphique vertical (par exemple, un graphique à colonnes) :
cli.getBoundingBox('vAxis#0#gridline')
Cadre de délimitation des données d'un graphique horizontal (par exemple, un graphique à barres) :
cli.getBoundingBox('hAxis#0#gridline')

Les valeurs sont relatives au conteneur du graphique. Appelez-le après que le graphique est dessiné.

Type renvoyé:objet
getSelection()

Renvoie un tableau des entités de graphique sélectionnées. Les entités sélectionnables sont les barres, les entrées de légende et les catégories. Pour ce graphique, vous ne pouvez sélectionner qu'une seule entité à la fois. Extended description .

Type renvoyé:tableau d'éléments de sélection
setSelection()

Sélectionne les entités de graphique spécifiées. Annule toute sélection précédente. Les entités sélectionnables sont les barres, les entrées de légende et les catégories. Pour ce graphique, vous ne pouvez sélectionner qu'une seule entité à la fois. Extended description .

Return Type (Type renvoyé) : aucun
clearChart()

Efface le graphique et libère toutes les ressources allouées.

Return Type (Type renvoyé) : aucun

Événements

Nom
error

Déclenché lorsqu'une erreur se produit lors de la tentative d'affichage du graphique.

Propriétés:id, message
onmouseover

Déclenché lorsque l'utilisateur pointe sur une entité visuelle. Renvoie les index de ligne et de colonne de l'élément correspondant du tableau de données. Une barre correspond à une cellule du tableau de données, une entrée de légende à une colonne (l'index de ligne est nul) et une catégorie à une ligne (l'index de colonne est nul).

Propriétés:ligne, colonne
onmouseout

Déclenché lorsque l'utilisateur éloigne le curseur de la souris d'une entité visuelle. Renvoie les index de ligne et de colonne de l'élément correspondant du tableau de données. Une barre correspond à une cellule du tableau de données, une entrée de légende à une colonne (l'index de ligne est nul) et une catégorie à une ligne (l'index de colonne est nul).

Propriétés:ligne, colonne
ready

Le graphique est prêt pour les appels de méthode externes. Si vous souhaitez interagir avec le graphique et appeler des méthodes après l'avoir dessiné, vous devez configurer un écouteur pour cet événement avant d'appeler la méthode draw, puis ne les appeler qu'après le déclenchement de l'événement.

Propriétés:aucune
select

Déclenché lorsque l'utilisateur clique sur une entité visuelle. Pour savoir ce qui a été sélectionné, appelez getSelection().

Propriétés:aucune

Règles concernant les données

L'ensemble du code et des données sont traités et affichés dans le navigateur. Aucune donnée n'est envoyée à aucun serveur.