Est-il interactif d'une bibliothèque graphique pour python

je suis à la recherche d'une bibliothèque graphique interactive pour Python.

par " graphe ", je voulais dire un ensemble de noeuds connectés par un ensemble de Sommets (pas un graphe de valeurs sur l'axe x-y, ni une grille de pixels).

par "interactif", je voulais dire que je peux glisser - déposer les noeuds autour et je dois être capable de cliquer sur les noeuds/vertices et avoir la bibliothèque passer les noeuds / vertices à mes callbacks, qui peuvent Ajouter / Supprimer des noeuds / vertices ou informations d'affichage (Je ne peux pas charger le graphique complet au démarrage car l'ensemble de données est trop grand/complexe; au lieu de cela, je vais charger seulement les tranches de données nécessaires en fonction des entrées de l'utilisateur).

par Python, je voulais dire le langage de programmation Python , la bibliothèque graphique devrait avoir une liaison CPython. J'ai Python 2.7 et python 3.1, mais je peux passer à 2.6 si nécessaire. Cette exigence de langage est parce que l'ensemble de données avec lequel je travaille n'a que Python contraignant.

la bibliothèque graphique doit prendre en charge graphique dirigé et être capable de disposer les noeuds automatiquement. Je dois mettre des étiquettes sur les noeuds.

de préférence, l'algorithme de layouting doit placer les noeuds adjacents près les uns des autres. Il devrait être capable de gérer de 100-1000 noeuds et environ 300-4000 sommets raisonnablement dans mon ordinateur portable de 4 ans (je commence généralement avec environ 100 noeuds, mais le nombre pourrait augmenter en fonction de la saisie de l'utilisateur). De préférence, Ce devrait être une bibliothèque avec peu de dépendances (sauf peut-être Gnome). L'Open source est préférable.

j'ai déjà écrit un prototype simple de mon programme en utilisant Tkinter Canvas, mais j'ai besoin d'une bibliothèque graphique plus sérieuse pour étendre le programme. J'ai regardé graphviz et matplotlib, mais apparemment ils sont seulement pour travailler avec des graphiques statiques et apparemment aurait besoin de beaucoup de travail pour faire des manipulations interactives (corriger moi si je me trompe, je n'ai regardé brièvement). J'ai aussi essayé de générer le graphe sur un fichier SVG et d'utiliser Inkscape pour le visualiser, mais c'est trop lent et prend trop de mémoire et à cause du nombre de Sommets il devient un désordre enchevêtré.

51
demandé sur Lie Ryan 2011-04-23 00:46:30

3 réponses

ressemble à Nodebox pourrait être ce que vous voulez:

http://nodebox.net/code/index.php/Graph Mac OSX

http://www.cityinabottle.org/nodebox/ Windows (utilisant OpenGL)

Nodebox screenshot

l'objet graph a une fonctionnalité d'interaction avec la souris ainsi, groupés dans l'objet graph.events . Il a l' propriétés suivantes:

  • graph.events.hovered : None ou le noeud sur lequel la souris plane.
  • graph.events.pressed : None ou le noeud sur lequel la souris est en appuyant vers le bas.
  • graph.events.dragged : None ou le nœud traîné.
  • graph.events.clicked : None ou le dernier noeud a cliqué.
  • graph.events.popup : quand True , affichera une fenêtre popup sur le a plané nœud.

est également venu à travers Gephi, ressemble qui pourrait avoir la fonctionnalité que vous voulez aussi bien.

http://gephi.org/ Windows , Linux et Mac OSX

Gephi est une visualisation interactive et plate-forme d'exploration pour tous les types des réseaux et des systèmes complexes, graphiques dynamiques et hiérarchiques.

gephi screenshot

26
répondu Acorn 2011-04-28 13:41:51

vous devriez certainement regarder la bibliothèque igraph si vous ne l'avez pas fait.

c'est une bibliothèque puissante qui peut gérer les grands graphiques et les différents styles de mise en page. Il peut également être utilisé pour des graphiques dirigés et pour des visualisations interactives et non interactives en 2D et 3D selon la liste des caractéristiques . Il y a aussi un tutorial .

mise à Jour: Une autre bibliothèque bien connue est NetworkX pour laquelle il existe des paquets Python ici . Notez que le logiciel Mac/Windows Nodebox, recommandé par Acorn, utilise des algorithmes NetworkX.

7
répondu lecodesportif 2011-04-28 13:48:46

j'ai le même problème. Finalement, je pense que nodebox opengl semble faire l'affaire. N'essayez pas d'utiliser la bibliothèque de graphiques sur le lien suivant

http://nodebox.net/code/index.php/Graph

avec nodebox opengl. Cela ne fonctionne pas, cette bibliothèque graphique est seulement compatible avec mac OSX nodebox. Mais dans tous les cas, c'est ok parce que tu n'en as pas besoin.

voir par exemple la question suivante:

ajout d'une étiquette au bord d'un graphique dans nodebox opnegl

il montre le code exemple qui fonctionne pour moi, le code peut être modifié de sorte que cliquer sur un noeud non seulement vous permet de déplacer le noeud, mais aussi vous permet de modifier le graphe.

il suffit de supprimer

label = "Placeholder"

du code et ça marche.

EDIT:

j'ai mis plus d' exemple détaillé de code ici: Nodebox open GL Graphique, en fonction de la taille n'est pas reconnu. (Ubuntu)

2
répondu patapouf_ai 2017-05-23 12:00:20