Exemple dinterface pour manipuler les rseaux Manipulation de
- Slides: 76
Exemple d’interface pour manipuler les réseaux
Manipulation de réseaux biologiques [Mc. Guffin & Jurisica, IEEE Info. Vis 2009]
Motivation • Comment visualiser des graphes (réseaux) ? – Plusieurs algorithmes de “layout” existent • [Di Battista et al. , 1999] • La conférence annuelle “Graph Drawing” 1992 -présent • Comment permettre à l’utilisateur de manipuler une visualisation de graphe ? – Ex: réseaux biologiques
Comment invoquer une commande? Deux sortes de commandes: • Commandes sans arguments, “à un coup” – Montrer / cacher étiquettes – Fermer / ouvrir un méta-noeud – Disposer les noeuds en ligne / cercle • Commandes nécessitant des arguments – Effectuer une translation (argument: déplacement) – Effectuer une rotation (argument: angle) – Changer l’opacité des noeuds (argument: alpha)
Comment invoquer des commandes sans arguments? • Boutons dans un panneau, barre d’outils, ou palette flottante – Consomment de l’espace – Demandent des mouvements d’aller-retour • Menus déroulants – Demandent encore plus de mouvements • Raccourcis clavier – Difficiles à découvrir – Ne s’étendent pas à un grand nombre de commandes • Menu contextuel – Mieux • Menu contextuel radial – Encore mieux !
Menus radiaux versus menus linéaires • Les directions sont plus mémorables et plus faciles à reproduire que les distances.
Menu radial hiéarchique
Marking Menus [Kurtenbach and Buxton, 1993]
Marking Menu • “Scale invariant recognition”: Reconnaissance des gestes (marques) qui ne dépend pas de la longueur des segments; seule les angles des segments importe. Donc, les marques peuvent être dessinées en petit et donc rapidement, de façon balistique. • Un utilisateur qui sait quelle marque dessiner n’a même pas besoin de voir le menu s’afficher.
Ensemble de marques découvrables (“self-revealing”), contrairement aux interfaces gestuelles habituelles
Présentation graphique améliorée
Le Hotbox dans Maya [Kurtenbach et al. , 1999]
Comment invoquer des commandes avec arguments? • Barre d’outils, menus déroulants, raccourcis clavier – Ont les mêmes problèmes mentionnés avant – En plus, ces techniques impliquent (habituellement) un changement de mode dans lequel on fournit les arguments. Donc: possibilité d’erreurs de mode. • Notre nouvelle version du hotbox – A tous les avantages mentionnés avant – Permet de fusionner l’invocation d’une commande avec la spécification de ses arguments – Évite les erreurs de mode
Notre hotbox
Comment sélectionner des noeuds? • Cliquer sur des noeuds individuels pour les sélectionner / désélectionner • Sélection rectangle • Sélection lasso • Sélection en fonction de la structure du réseau (comment? ) Question: • Comment éviter des changements de mode ?
Selecting a subset with rectangle/lasso [Saund et al. , 2003]
Selecting a subset by dragging out radius of neighborhood
Démo !
Remarque • L’interface utilise seulement 2 boutons pour accéder à … – 3 menus radiaux supplémentaires – 4 techniques de sélection – Le hotbox (dans lequel on pourrait mettre des centaines de commandes) … sans panneaux ou de barres d’outils • Ce qui laisse beaucoup d’autres boutons pouvant servir à des raccourcis, au besoin
NAVi. Ga. TOR • Logiciel gratuit d’analyse et de visualisation de réseaux biologiques • On y retrouve une version de notre hotbox
“chains” biconnected components trees nodes with common neighborhoods
Pour plus d’informations … • http: //profs. logti. etsmtl. ca/mmcguffin/research/hotter. Box/
Méthodes de disposition (“layout”) pour les réseaux
Disposition dirigée par forces (“force-directed layout”) • Simulation de ressort et de forces de répulsion jusqu’à convergence vers un état d’énergie minimale • Exemple: – Force de ressort FS = k(x-x 0) entre chaque pair de noeuds adjacents, où k est une constante, x est la distance entre les noeuds, et x 0 est la longueur du ressort au repos – Force de répulsion FR = alpha / x 2 entre chaque pair de noeuds, où alpha est une constante, et x est la distance entre les noeuds
Disposition dirigée par forces • simulate. One. Step. Of. Force. Directed. Layout() { // initialization for ( int i = 0; i < nodes. size(); ++i ) { Node n = nodes. get(i); n. force. X = 0; n. force. Y = 0; } …
Disposition dirigée par forces • … // repulsive force between all pairs of nodes for ( int i = 0; i < nodes. size(); ++i ) { Node n 1 = nodes. get(i); for ( int j = i+1; j < nodes. size(); ++j ) { Pourquoi j=i+1 Node n 2 = nodes. get(j); float dx = n 2. x - n 1. x; float dy = n 2. y - n 1. y; if ( dx == 0 && dy == 0 ) { dx = (float)Math. random()-0. 5 f; dy = (float)Math. random()-0. 5 f; } float distance. Squared = dx*dx + dy*dy; float distance = (float)Math. sqrt( distance. Squared ); float force = alpha / distance. Squared; dx *= force / distance; dy *= force / distance; n 1. force. X -= dx; n 1. force. Y -= dy; n 2. force. X += dx; n 2. force. Y += dy; } } … ?
Disposition dirigée par forces • … // spring force for ( int i = 0; i < nodes. size(); ++i ) { Node n 1 = nodes. get(i); for ( int j = 0; j < n 1. neighbours. size(); ++j ) { Node n 2 = n 1. neighbours. get(j); int n 2_index = network. get. Index. Of. Node( n 2 ); // obtenir l’indice dans le vecteur global if ( n 2_index < i ) Pourquoi ? continue; float dx = n 2. x - n 1. x; float dy = n 2. y - n 1. y; float distance = (float)Math. sqrt( dx*dx + dy*dy ); if ( distance > 0 ) { float distance. From. Rest. Length = distance - SPRING_REST_LENGTH; float force = k * distance. From. Rest. Length; dx *= force / distance; dy *= force / distance; n 1. force. X += dx; n 1. force. Y += dy; n 2. force. X -= dx; n 2. force. Y -= dy; } } } …
Disposition dirigée par forces • … // update positions for ( int i = 0; i < nodes. size(); ++i ) { Node n = nodes. get(i); // Don't change positions of nodes that are fixed in place. if ( n. is. Fixed ) continue; float dx = time. Step * n. force. X; float dy = time. Step * n. force. Y; float displacement. Squared = dx*dx + dy*dy; final float MAX_DISPLACEMENT = 10; final float MAX_DISPLACEMENT_SQUARED = MAX_DISPLACEMENT * MAX_DISPLACEMENT; if ( displacement. Squared > MAX_DISPLACEMENT_SQUARED ) { float s = MAX_DISPLACEMENT / (float)Math. sqrt( displacement. Squared ); dx *= s; dy *= s; } n. x += dx; n. y += dy; } } // simulate. One. Step. Of. Force. Directed. Layout()
Disposition dirigée par forces • Comment, et combien de fois, faut-il appeler la routine simulate. One. Step. Of. Force. Directed. Layout() ? • Quel serait l’effet de changer –k? – alpha ? – time. Step ?
Parcours en largeur (Breadth-First Traversal) • Chaque noeud a une couleur : – blanc : pas encore visité; la couleur initiale – gris : visité et dans la file (“queue”); en cours de traitement; peut-être adjacent à des noeuds blancs – noir : visité et traité; n’est pas adjacent à des noeuds blancs • Chaque noeud a aussi une distance (en arêtes, mesurée à partir de la racine) et un pointeur (ou une référence) vers son prédécesseur • On se sert d’une file (“queue”) pour stocker les noeuds gris
Parcours en largeur • entrée: graphe G=(V, E) et noeud root dans V • for each v in V { // initialisation v. color = WHITE; v. distance = +infinity; v. predecessor = NULL; } root. color = GREY; root. distance = 0; Q. enqueue( root ); // enfile le premier noeud comme point de départ while ( ! Q. empty() ) { u = Q. dequeue(); // défile le prochain noeud for each v such (u, v) in E { if ( v. color == WHITE ) { v. color = GREY; v. distance = u. distance + 1; v. predecessor = u; Q. enqueue( v ); } } u. color = BLACK; }
Parcours en largeur • Remarque: une fois le parcours terminé, les pointeurs prédécesseur définissent l’arborescence de parcours en largeur (“breadth-first tree”) ayant comme racine le noeud qui a servi comme point de départ. La profondeur de chaque noeud dans cette arborescence est donnée par distance. • Ce parcours sert aussi à identifier les composantes connexes dans un graphe. (Comment? )
Parcours en largeur : version plus générique • • public abstract class Node. Visitor { // retourne faux pour annuler le parcours public abstract boolean visit( Node node, Node predecessor. Node, int distance ); } public void bread. First. Traversal( Node root, Node. Visitor visitor ) { for each v in V { // initialisation v. color = WHITE; v. distance = +infinity; v. predecessor = NULL; } root. color = GREY; root. distance = 0; Q. enqueue( root ); // enfile le premier noeud comme point de départ while ( ! Q. empty() ) { u = Q. dequeue(); // défile le prochain noeud for each v such (u, v) in E { if ( v. color == WHITE ) { v. color = GREY; v. distance = u. distance + 1; v. predecessor = u; Q. enqueue( v ); } } if ( ! visitor. visit( u, u. predecessor, n. distance ) ) break; u. color = BLACK; } }
Exemple de layout radial Un noeud central sert comme racine pour un parcours en largeur. L’arborescence ainsi retrouvée est disposée de manière radiale. Seulement les arêtes de l’arborescence sont montrées. Exemple tiré de [Yee et al. , 2001] http: //people. ischool. berkeley. edu/~ping/gtv/
Exemple de layout radial
Exemple de layout radial
Exemple de layout radial
Exemple de layout radial
Exemple de layout radial
Réordonnancement de matrice • Graphe biparti qu’on veut dessiner en deux niveaux (“layered drawing”) – Exemple: noeuds: {A, B, C, D, 1, 2, 3, 4, 5}, arêtes dans {A, B, C, D}×{1, 2, 3, 4, 5} • Le réordonnancement sert à réduire les croisements d’arètes
• Il s’agit de réordonnancer les colonnes et rangées d’une sorte de matrice d’adjacence, pour ramener les “ 1”s vers le diagonal Tiré de [Mäkinen et Siirtola, 2005]
Une façon simple de faire: l’heuristique barycentrique • reorder( nodes ) { for ( i = 0; i < nodes. size(); ++i ) { n = nodes. get( i ); neighbors = neighbors. Of. Node( n ); n. new. Position = 0; for n 2 in neighbors n. new. Position += n 2. position; n. new. Position /= neighbors. size(); } nodes. sort. By. Value. Of. New. Position(); for ( i = 0; i < nodes. size(); ++i ) { n = nodes. get( i ); n. position = i; } } loop { } reorder({A, B, C, D}); reorder({1, 2, 3, 4, 5}); • Quand arrêter ?
Cas plus général: un graphe qu’on veut dessiner en plusieurs couches (“layered drawing”) layer 1 layer 2 layer 3 layer 4 layer. N-1 layer. N
• reorder( nodes, fixed. Nodes ) { for ( i = 0; i < nodes. size(); ++i ) { n = nodes. get( i ); neighbors = neighbors. Of. Node( n ). intersect( fixed. Nodes ); n. new. Position = 0; for n 2 in neighbors n. new. Position += n 2. position; n. new. Position /= neighbors. size(); } nodes. sort. By. Value. Of. New. Position(); for ( i = 0; i < nodes. size(); ++i ) { n = nodes. get( i ); n. position = i; } } loop { reorder( layer 2, layer 1 ); reorder( layer 3, layer 2 ); … reorder( layer. N, layer. N-1 ); } reorder( layer. N-1, layer. N ); … reorder( layer 2, layer 3 ); reorder( layer 1, layer 2 );
Cas relié: un graphe qu’on veut dessiner en plusieurs cercles concentriques Serait amélioré si on appliquait une méthode (comme l’heuristique barycentrique) pour réduire les croisements d’arêtes d’un niveau à l’autre.
Cas spécial: les colonnes et rangées de la matrice sont identiques Avant réordonnancement … C B F G H I J K H E D H J A J 1 I E D K F A C 1 1 G 1 E 1 K F C 1 G 1 1 1 1 C 1 1 A G D 1 I F B E B K J I 1 D H B 1 1 1
Cas spécial: les colonnes et rangées de la matrice sont identiques … Après réordonnancement C B F G H I J K A E D A B 1 1 D 1 F D 1 1 E I J A B C D E F G H I J K K G H I J K 1 1 1 G H F 1 C E C 1 1 1 1 1
Après réordonnancement, les “ 1”s sont plus près du diagonal dans la matrice, et les cliques sont plus faciles à voir dans la matrice C B F G H I J K A E D A B 1 1 D 1 F D 1 1 E I J A B C D E F G H I J K K G H I J K 1 1 1 G H F 1 C E C 1 1 1 1 1
Un SPLOM (“scatter plot matrix”) pour visualiser les noeuds d’un graphe Dimensions: • Degré • Coefficient de clustering (“cc”) • Noyau (“core”)
Le coefficient de clustering Tiré de http: //en. wikipedia. org/wiki/Clustering_coefficient
Décomposition en noyaux (“cores”) Tiré de [Batagelj et Zaveršnik, 2002], http: //arxiv. org/abs/cs. DS/0202039
Scatterplot Matrix (SPLOM)
Autre SPLOM possible: SPLOM des sous-graphes intéressants Dimensions: • type (noyaux en rouge, bicomposantes en vert, arbres en cyan, chaînes en bleu, ensembles de noeuds ayant les même voisins en magenta) • taille (“size”) en noeuds • degré moyen • coefficient de clustering (“cc”) moyen • noyau (“core”) moyen
Utiliser les noyaux pour placer les noeuds sur des cercles concentriques Tiré de [Alvarez-Hamelin et al. , 2005]
Utiliser les noyaux pour placer les noeuds sur des cercles concentriques Tiré de [Alvarez-Hamelin et al. , 2005]
Visualisation “focus+context” d’un grand réseau Image de Igor Jurisica
- Manipuler la souris
- Scurit
- Rseaux sociaux
- Rseaux
- Rseaux
- Haribo c'est beau la vie pour les grand et les petit
- Les arguments pour tous les sujets
- Toi et moi basel
- Organiser un cross
- Exemple de ppre pour eip
- Photos mamans du monde
- Pour les enfants du monde entier
- Sd wan pour les nuls
- A toutes les mamans du monde
- Frank michael pour toutes les mamans du monde
- Je veux te chanter marie
- Monmuse
- Les adjectifs démonstratifs s'utilisent pour
- Dmr pour les nuls
- Construire les premiers outils pour structurer sa pensée
- Chiac pour les dummies
- Ordre du jour pour les enseignants
- Pyramide de bird pour les nuls
- Sphincter
- Master sciences analytiques pour les bioindustries
- 4 lois spirituelles campus pour christ
- Outils pour les cfds
- Comment la rendre heureuse
- Les outils pédagogiques pour faciliter lapprentissage
- Exemple d'une introduction
- Parts de la flor
- Les lettres en français
- Les 10 volcans les plus dangereux du monde
- Le thème de l'injustice dans la ficelle
- Les constellations les plus connues
- Je moi tu toi
- Part de la planta en la fulla s'uneix a la tija
- Variables et invariables
- Les classe de mots variable
- Trouvez les réponses. écrivez-les en chiffres (numbers).
- Grand corps malade voyage en train lyrics
- En quittant cette terre
- Preactionneurs
- Les trois obstacles et les quatre démons
- Dieu cherche encore des hommes forts lyrics
- L'horloge stratégique
- Qu'est-ce que tu aimes manger?
- Les mots qu'on ne dit pas sont les fleurs du silence
- Mot de relation
- Fonctions et solutions techniques
- Les voitures les plus rapides du monde
- Visual basic string functions
- String manipulation
- Java string manipulation examples
- Suva schwarzer freitag
- Knowledge manipulation in artificial intelligence
- Quels sont les constituants d'une phrase
- Data manipulation instructions in plc
- Cycle of manipulation
- C string manipulation
- Variable manipulation element
- Mass manipulation meaning
- Berikut ini yang bukan sasaran dari file sistem adalah ....
- List manipulation in prolog
- Quotes of lady macbeth manipulating macbeth
- Self operated and power operated instruments
- Flag manipulation instructions in 8086
- Pickling dental casting
- Utility wax dental uses
- Causal manipulation
- Classification of gypsum products in dentistry
- Direct manipulation
- How can a dml statement executed in the database
- Define manipulation check
- Psychomotor domain verbs list
- Oblique pulling spinal manipulation
- Antecedent interventions