web-dev-qa-db-fra.com

Existe-t-il une bibliothèque graphique interactive pour python

Je recherche une bibliothèque graphique interactive pour Python.

Par " graphique ", j'entendais un ensemble de nœuds reliés par un ensemble de sommets (pas un tracé de valeurs sur l'axe x-y, ni une grille de pixels).

Par "interactif", je voulais dire que je pouvais glisser-déposer les nœuds et que je devais être en mesure de cliquer sur les nœuds/sommets et que la bibliothèque passe les nœuds/sommets à mes rappels, ce qui pourrait ajouter/supprimer des nœuds/sommets ou afficher des informations (je ne peux pas charger le graphique complet au démarrage car l'ensemble de données est trop grand/complexe; à la place, je ne chargerai que 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 rétrograder à 2.6 si nécessaire. Cette exigence de langue est due au fait que l'ensemble de données avec lequel je travaille n'a qu'une liaison Python.

La bibliothèque graphique doit prendre en charge graphe orienté et être en mesure de disposer automatiquement les nœuds. J'ai besoin de mettre des étiquettes sur les nœuds.

De préférence, l'algorithme de mise en page doit placer les nœuds adjacents les uns à côté des autres. Il devrait être capable de gérer de 100 à 1000 nœuds et d'environ 300 à 4000 sommets de manière raisonnable dans mon ordinateur portable de 4 ans (je commence généralement avec environ 100 nœuds, mais le nombre peut augmenter en fonction de l'entrée de l'utilisateur). De préférence, ce devrait être une bibliothèque avec pas trop de dépendances (sauf peut-être pour 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 ne servent qu'à travailler avec des graphiques statiques et auraient apparemment besoin de beaucoup de travail pour faire des manipulations interactives (corrigez-moi si je me trompe, je ne les ai regardés que brièvement) . J'ai également essayé de générer le graphique dans un fichier SVG et d'utiliser Inkscape pour le visualiser, mais il est trop lent et prend trop de mémoire et en raison du nombre de sommets, il devient un désordre embrouillé.

57
Lie Ryan

On dirait que Nodebox pourrait être ce que vous voulez:

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

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

Nodebox screenshot

L'objet graphique possède également des fonctionnalités d'interaction avec la souris, regroupées dans le graph.events objet. Il a les propriétés suivantes:

  • graph.events.hovered: None ou le nœud sur lequel la souris survole.
  • graph.events.pressed: None ou le nœud sur lequel la souris appuie.
  • graph.events.dragged: None ou le nœud que vous faites glisser.
  • graph.events.clicked: None ou le dernier nœud cliqué.
  • graph.events.popup: lorsque True, affichera une fenêtre contextuelle sur le nœud survolé.

Nous sommes également tombés sur Gephi, on dirait que cela pourrait aussi avoir les fonctionnalités que vous souhaitez.

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

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

gephi screenshot

28
Acorn

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 de grands graphiques et différents styles de mise en page. Il peut également être utilisé pour des graphes dirigés et pour des visualisations interactives et non interactives en 2D et 3D selon la liste des fonctionnalités . Il y a aussi un tutoriel .

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

9
lecodesportif

J'ai le même problème. Au final, 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 de graphes n'est compatible qu'avec la nodebox mac OSX. Mais en tout cas, ça va parce que vous n'en avez pas besoin.

Voir par exemple la question suivante:

Ajout d'étiquette à un bord d'un graphe dans nodebox opnegl

Il montre un exemple de code qui fonctionne pour moi, le code peut être modifié de sorte que cliquer sur un nœud vous permet non seulement de déplacer le nœud, mais également de modifier le graphique.

Il suffit de supprimer

label = "Placeholder"

du code et cela fonctionne.

ÉDITER:

J'ai mis un exemple de code plus détaillé ici: Nodebox open GL Graph, fonction de taille non reconnue. (Ubuntu)

3
patapouf_ai