Création de notre premier graphe

Dans ce premier chapitre pratique, je vais vous présenter par étape la création d’un premier graphe.

Voici le joli petit graphe que nous obtiendrons à la fin de ce chapitre
Voici le joli petit graphe que nous obtiendrons à la fin de ce chapitre

Créer un page vide

La première chose à faire est tout d’abord de créer une page vide dans laquelle nous allons importer la bibliothèque VisNetwork. Pour cela créez un nouveau fichier HTML et copier-coller le code ci dessous :

<!doctype html>
<html>
  <head>
    <title>Tuto VisNetwork</title>
    
    <style>
        #graphe
        {
          display: inline-block;
          width: 800px;
          height: 600px;

          background-color: #f0f0f0;
        }
    </style>
    
    <script type="text/javascript" src="vis.min.js"></script>
  </head>
  <body>

    <div id="graphe"></div>

    <script type="text/javascript">

        // Notre code sera placé ici
        
    </script>

  </body>
</html>

La div html graphe permet de contenir notre graphe, sa taille est définie dans le css en haut du fichier.

N’oubliez pas d’inclure le fichier vis.min.js et placez le dans le même dossier que votre fichier html.

Si vous ouvrez la page que vous venez de créer avec un navigateur internet, vous devriez apercevoir un rectangle gris qui correspond à la zone dans laquelle nous allons afficher notre graphe.

Créer une instance de VisNetwork

La seconde chose à faire est de créer une instance de Vis.Network

let nodes = new vis.DataSet([]);
let edges = new vis.DataSet([]);
        
let container = document.getElementById('graphe');
        
let data = {
    nodes: nodes,
    edges: edges
};
let options = {};
        
let network = new vis.Network(container, data, options);

Notre instance est composé de :

  • data : qui contient les données de notre graphe, elle est composé de deux vis.DataSet correspondant à nos noeuds et à nos liens que nous allons voir dans la suite de ce chapitre.
  • options : qui nous permettra de personnaliser notre graphe, nous verrons cela dans le prochain chapitre.

Notre instance network va nous permettre d’afficher le graphe et de gérer les actions sur le graphe, nous verrons cela dans le suite du tutoriel.

Dans mes exemples de code j’utilise le mot clé let pour déclarer les variables, mais il est possible d’utiliser var ou const à la place si vous le préférez.

Création de noeuds

Nous allons maintenant ajouter notre premier noeud, pour cela placer le code ci-dessous après le code précédent.

nodes.add(
    [
        {
            id: 1,
            label: "N1"
        }
    ]
);

Nous ajoutons à notre Dataset, via la méthode add :

  • Un tableau [] contenant :

    • Un objet nœud {} contenant :

      • id : Un identifiant qui doit être unique, ce qui permettra d’identifier le nœud au niveau du code.
      • label : Un label qui correspond au texte qui sera affiché sur le nœud, ce qui permet à l’utilisateur d’identifier le nœud.

En rechargeant dans votre page HTML vous devriez obtenir un nœud comme ceci :

Notre premier noeud
Notre premier noeud

Vous pouvez déplacer votre nœud en maintenant le clic gauche de la souris enfoncé sur le nœud, si vous faite la même chose à un endroit où il n’y a pas de nœud vous pouvez déplacer la caméra, vous pouvez également effectuer un zoom/dé-zoom avec la molette de la souris.

Création de liens

Il ne nous reste plus qu’a ajouter un second noeud, puis à créer notre premier lien qui reliera nos deux noeuds et nous obtenons alors notre premier graphe ! :)

// Ajout de nos deux noeuds
nodes.add(
    [
        {
            id: 1,
            label: "N1"
        },
        {
            id: 2,
            label: "N2"
        }
    ]
);

// Ajout du lien entre nos deux noeuds
edges.add(
    [
        {
            from: 1,
            to: 2,
            label: "E1",
        }
    ]
);

Les données de notre lien sont composées de :

  • from : correspond à l’identifiant du premier noeud relié.
  • to : correspond à l’identifiant du second noeud relié.
  • label : correspond au texte qui sera affiché sur le lien.

En rechargeant vous page HTML vous devriez obtenir votre premier graphe comme ceci :

Notre premier lien
Notre premier lien

Si vous déplacez un noeud vous remarquerez que le second est également déplacé, cela est dû à force d’attraction du graphe, nous verrons dans une partie ultérieure comment la personnaliser.

Récapitulatif complet du code :

<!doctype html>
<html>
  <head>
    <title>Tuto VisNetwork</title>
    
    <style>
        #graphe
        {
          display: inline-block;
          width: 800px;
          height: 600px;

          background-color: #f0f0f0;
        }
    </style>
    
    <script type="text/javascript" src="vis.min.js"></script>
  </head>
  <body>

    <div id="graphe"></div>

    <script type="text/javascript">

        
        let nodes = new vis.DataSet([]);
        let edges = new vis.DataSet([]);
        
        let container = document.getElementById('graphe');
        
        let data = {
          nodes: nodes,
          edges: edges
        };
        let options = {};
        
        // Initialisation de l'instance de VisNetwork
        let network = new vis.Network(container, data, options);
        
        // Ajout de nos deux noeuds
        nodes.add(
            [
                {
                    id: 1,
                    label: "N1"
                },
                {
                    id: 2,
                    label: "N2"
                }
            ]
        );
        
        // Ajout du lien entre nos deux noeuds
        edges.add(
            [
                {
                    from: 1,
                    to: 2,
                    label: "E1",
                }
            ]
        );
    </script>

  </body>
</html>

Les graphes orientés

Un graphe peut être orienté ou non, lorsqu’un graphe est orienté les liens qui le compose sont dirigé c’est-à-dire qu’un vont d’un noeuds vers un autre.

Reprenons l’exemple précédent, en ajoutant une direction à notre relation.

// Ajout de nos deux noeuds
nodes.add(
    [
        {
            id: 1,
            label: "N1"
        },
        {
            id: 2,
            label: "N2"
        }
    ]
);

// Ajout d'un lien entre nos deux noeuds orientés du noeuds N1 vers le noeuds N2
edges.add(
    [
        {
            from: 1, // Source : noeud "N1"
            to: 2,   // Destination : noeud "N2"
            label: "E1",
            arrows: "to"
        }
    ]
);
Notre lien est maintenant représenté sous la forme d'une flèche
Notre lien est maintenant représenté sous la forme d'une flèche

Exercice

Pour vous exercer, je vous propose un exercice assez simple, le but est d’obtenir le graphe ci-dessous :

Le résultat à obtenir
Le résultat à obtenir

Si vous êtes bloqué, vous pouvez retrouver la correction ci-dessous.

<!doctype html>
<html>
  <head>
    <title>Tuto VisNetwork</title>
    
    <style>
        #graphe
        {
          display: inline-block;
          width: 800px;
          height: 600px;

          background-color: #f0f0f0;
        }
    </style>
    
    <script type="text/javascript" src="vis.min.js"></script>
  </head>
  <body>

    <div id="graphe"></div>

    <script type="text/javascript">

        
        let nodes = new vis.DataSet([]);
        let edges = new vis.DataSet([]);
        
        let container = document.getElementById('graphe');
        
        let data = {
          nodes: nodes,
          edges: edges
        };
        let options = {};
        
        let network = new vis.Network(container, data, options);
        
        nodes.add(
            [
                {
                    id: 1,
                    label: "N1"
                },
                {
                    id: 2,
                    label: "N2"
                },
                {
                    id: 3,
                    label: "N3"
                },
                {
                    id: 4,
                    label: "N4"
                }
            ]
        );
        
        
        edges.add(
            [
                {
                  from: 1,
                  to: 2,
                  label: "E1-2"
                },
                {
                  from: 2,
                  to: 3,
                  label: "E2-3",
                  arrows: "to"
                },
                {
                  from: 1,
                  to: 4,
                  label: "E1-4"
                },
                {
                  from: 4,
                  to: 2,
                  label: "E2-4"
                }
            ]
        );
        
    </script>

  </body>
</html>

Avec ce premier chapitre pratique, nous avons vu comment créer notre premier graphe, j’espère qu’il vous a plu, dans le prochain chapitre nous allons découvrir comment personnaliser notre graphe.