Diagramme de Sankey

Présentation

Un diagramme de Sankey est une visualisation qui permet de représenter un flux d'un ensemble de valeurs à un autre. Les éléments en cours de connexion sont appelés nœuds et les connexions sont appelées liens. Les Sankeys sont particulièrement adaptés lorsque vous souhaitez afficher un mappage de type plusieurs à plusieurs entre deux domaines (par exemple, des universités et des majors) ou plusieurs chemins dans un ensemble d'étapes (par exemple, Google Analytics utilise sankeys pour montrer comment le trafic passe des pages aux autres pages de votre site Web).

Pour leur curiosité, ils portent le nom du capitaine Sankey, qui a créé un diagramme de l'efficacité des machines à vapeur qui utilisait des flèches dont la largeur était proportionnelle à la perte de chaleur.

Remarque:Des modifications importantes seront peut-être apportées au graphique sankey dans les prochaines versions de Google Charts.

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

Remarque:Les graphiques 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 se connectent à trois autres catégories, X, Y et Z. Certaines de ces connexions sont plus lourdes que d'autres. Par exemple, B dispose d'une connexion fine à X et d'une connexion beaucoup plus épaisse à Y.


Essayez de pointer sur un lien pour le mettre en surbrillance.

Pour créer un graphique sankey, fournissez un ensemble de lignes, chacune contenant des informations sur une connexion: de, vers et (pondérations). 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 dans vos données. Si A renvoie vers lui-même ou renvoie vers B qui renvoie vers C qui renvoie vers A, votre graphique ne s'affichera pas.

Sankeys multiniveaux

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

Les graphiques Sankey ajoutent des niveaux supplémentaires si nécessaire et les affichent automatiquement. Voici le code complet du 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 peuvent définir des couleurs personnalisées pour les nœuds et les liens. Vous pouvez attribuer des palettes de couleurs personnalisées aux nœuds et aux liens à l'aide des options colors (sankey.node.colors et sankey.link.colors, respectivement). Des modes de coloration différents peuvent également leur être attribués à l'aide de l'option colorMode.

Si les couleurs ne sont pas personnalisées, elles sont définies par défaut sur 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 les couleurs des liens, des nœuds et des libellés à l'aide des options de configuration. Nous en sélectionnons trois avec la même teinte, mais des luminosités différentes:

Ces options se présentent comme suit:

    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 en anglais.

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

Personnaliser les libellés

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

Voici le bloc d'options du 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é une marge intérieure de 30 pixels 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 à l'aide de la commande sankey.node.width:

En haut, 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 du tableau représente une connexion entre deux étiquettes. La troisième colonne indique l'intensité de cette connexion et est reflétée dans la largeur du tracé entre les étiquettes.

Columns:

  Colonne 0 Colonne 1 Colonne 2 Colonne N (facultatif)
Objectif : Source Destination Valeur Rôles facultatifs
Type de données: chaîne chaîne nombre
Rôle : domaine domaine données ou y ayant accédé.
Rôles de colonne facultatifs:

Aucune note

Aucune note

Aucune note

 

Options de configuration

Nom
force_frame

Permet de dessiner le graphique dans un cadre intégré. Notez que dans IE8, cette option est ignorée. Tous les graphiques IE8 sont dessinés dans des cadres i-frame.

Type:booléen
Default : "false"
hauteur

Hauteur du graphique, en pixels.

Type:nombre
Par défaut:hauteur de l'élément conteneur
sankey.itérations

Avec des sankeys à plusieurs niveaux, il n'est pas toujours évident de savoir où placer les nœuds pour une lisibilité optimale. Le moteur de mise en page D3 teste différentes mises en page de nœuds et s'arrête lorsque sankey.iterations tentatives ont été effectuées. Plus ce nombre est élevé, plus la mise en page des sankeys complexes est agréable, mais cela entraîne un coût. Le rendu des sankeys est plus long. À l'inverse, plus le nombre est court, plus les graphiques s'afficheront rapidement.

Type:entier
Default:32
lien_santé.lien

Contrôle les attributs des connexions entre les nœuds. Actuellement, tous les attributs concernent 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 coloration pour les liens entre les nœuds. Les valeurs possibles sont :

  • 'source' : couleur du nœud source est utilisée pour les liens vers tous les nœuds cibles.
  • 'target' : couleur du nœud cible 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é en dégradé de la couleur du nœud source à celle du nœud cible.
  • 'none' : option par défaut. Les couleurs du lien sont définies sur la valeur par défaut (ou 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
Default : "none"
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 coloration pour les nœuds sankey. Les valeurs possibles sont :

  • 'unique' : chaque nœud reçoit une couleur unique.
Type:chaîne
Default : "unique"
info-bulle

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

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

Si ce paramètre est défini sur "true", utilisez les info-bulles affichées en HTML (au lieu de la version SVG). Pour en savoir plus, consultez Personnaliser le contenu de l'info-bulle.

Remarque:La personnalisation du contenu de l'info-bulle HTML via le rôle de données de la colonne d'info-bulles n'est pas compatible avec la visualisation sous forme de graphique à bulles.

Type:booléen
Default : "false"
tooltip.textStyle

Objet qui spécifie le style du texte de l'info-bulle. L'objet est au format suivant:

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

color peut correspondre à n'importe quelle chaîne de couleur HTML, par exemple 'red' ou '#00cc00'. Voir aussi 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 conteneur

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 éléments gauche, haut, 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 par les 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 dans 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, une colonne) :
cli.getBoundingBox('vAxis#0#gridline')
Cadre de délimitation des données d'un graphique horizontal (à barres, par exemple) :
cli.getBoundingBox('hAxis#0#gridline')

Les valeurs sont relatives au conteneur du graphique. Appelez-la après le graphique.

Return Type (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, une seule entité peut être sélectionnée à la fois. Extended description .

Return Type (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 ses 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 Transmettez les index de ligne et de colonne de l'élément de table de données correspondant. Une barre est associée à une cellule du tableau de données, à une entrée de légende dans une colonne (l'index de ligne est nul) et une catégorie à une ligne (l'index de colonne est nul).

Properties (Propriétés) : ligne, colonne
onmouseout

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

Properties (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 et l'appeler uniquement après le déclenchement de l'événement.

Properties (Propriétés) : aucune
select

Déclenché lorsque l'utilisateur clique sur une entité visuelle Pour en savoir plus, sélectionnez getSelection().

Properties (Propriétés) : aucune

Règles sur 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 à un serveur.