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é.
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)
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
: quandTrue
, 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.
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.
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)