web-dev-qa-db-fra.com

Python équivalent de D3.js

Quelqu'un peut-il recommander une Python pouvant faire une visualisation de graphique interactive ?

Je veux spécifiquement quelque chose comme d3.js mais pour python et idéalement, ce serait aussi la 3D.

J'ai regardé:

  • NetworkX - cela ne fait que Matplotlib tracés et ceux-ci semblent être en 2D. Je n'ai vu aucune sorte d'interactivité, comme celle donnée par d3.js, Telle que l'extraction de nœuds.
  • graph-tool - il ne fait que des graphes 2D et a des graphes très lents interactifs.
98
Eiyrioü von Kauyf

Vous pouvez utiliser le module d3py a python qui génère des pages XML contenant le script d3.js. Par exemple:

import d3py
import networkx as nx

import logging
logging.basicConfig(level=logging.DEBUG)

G = nx.Graph()
G.add_Edge(1,2)
G.add_Edge(1,3)
G.add_Edge(3,2)
G.add_Edge(3,4)
G.add_Edge(4,2)

# use 'with' if you are writing a script and want to serve this up forever
with d3py.NetworkXFigure(G, width=500, height=500) as p:
    p += d3py.ForceLayout()
    p.show()
66
Vincent Agnus

Supporte graphiquement les graphiques 2D et 3D interactifs. Les graphiques sont rendus avec D3.js et peuvent être créés avec un API Python , matplotlib , ggplot pour Python , Seaborn =, prettyplotlib , et pandas . Vous pouvez effectuer un zoom, un panoramique, activer/désactiver les traces et afficher les données en survol. Les tracés peuvent être incorporés dans HTML, des applications, des tableaux de bord et des blocs-notes IPython. Ci-dessous, un graphique de température montrant l'interactivité. Voir la galerie de Notebooks IPythontutoriels pour plus d'exemples.

enter image description here



docs fournit des exemples de types de tracé et d'extraits de code pris en charge.



enter image description here

Spécifiquement à votre question, vous pouvez également créer des tracés interactifs à partir de NetworkX.

enter image description here

Pour le traçage 3D avec Python, vous pouvez créer des diagrammes 3D de dispersion, de ligne et de surface qui sont également interactifs. Les tracés sont rendus avec WebGL. Par exemple, voir graphique 3D des taux de swap britanniques.



enter image description here

Divulgation: Je fais partie de l'équipe Plotly.

38
Mateo Sanchez

Avez-vous regardé vincent? Vincent prend des objets de données Python et les convertit en grammaire de visualisation Vega. Vega est un outil de visualisation de niveau supérieur construit au-dessus de D3. Par rapport à D3py, le référentiel vincent a été mis à jour plus récemment. Bien que les exemples soient tous statiques D3.

plus d'informations:


Les graphiques peuvent être visualisés en Ipython, ajoutez simplement ce code

vincent.core.initialize_notebook()

Vous pouvez également afficher le graphique de sortie JSON dans l'éditeur en ligne de Vega ( http://trifacta.github.io/vega/editor/ ) ou le visualiser sur votre Python localement sur le serveur.

Je ne sais pas quand, mais le paquet Pandas devrait avoir une intégration D3 à un moment donné. http://pandas.pydata.org/developers.html

Bokeh est une bibliothèque de visualisation Python) qui prend en charge la visualisation interactive. Son principal moteur de sortie est HTML5 Canvas et utilise un modèle client/serveur.

exemples: http://continuumio.github.io/bokehjs/

20
sk8asd123

Une recette que j'ai utilisée (décrite ici: les fichiers de données de réseau co-directeur en GEXF et JSON d'OpenCorporates Data via Scraperwiki et networkx ) est la suivante:

  • générer une représentation réseau en utilisant networkx
  • exporter le réseau sous forme de fichier JSON
  • importer ce JSON dans d3.js. ( networkx peut exporter les représentations arborescente et graphique/réseau que d3.js peut importer).

Le networkx exportateur JSON se présente sous la forme:

from networkx.readwrite import json_graph
import json
print json.dumps(json_graph.node_link_data(G))

Sinon, vous pouvez exporter le résea en tant que fichier XML [~ # ~] gexf [~ # ~] , puis importer ce représentation dans la sigma.js bibliothèque de visualisation Javascript.

from xml.etree.cElementTree import tostring
writer=gf.GEXFWriter(encoding='utf-8',prettyprint=True,version='1.1draft')
writer.add_graph(G)
print tostring(writer.xml)
17
psychemedia

Une autre option est bokeh qui vient de passer à la version 0.3.

16
MrDrFenner

Départ python-nvd . Il s'agit d'un python wrapper pour nvd3. Il semble plus cool que d3.py et offre également plus d'options graphiques.

5
richie

Pour ceux qui ont recommandé pyd , il n'est plus en développement actif et vous indique vincent . Vincent n'est plus en développement actif et recommande d'utiliser altair .

Donc, si vous voulez un Pythonic d3, utilisez altair.

5
Wes

Je suggérerais d'utiliser mpld3 qui combine les visualisations javascript de D3js avec matplotlib de python.

L'installation et l'utilisation sont vraiment simples et comportent des plugins et des outils interactifs.

http://mpld3.github.io/

4
Ram

Vous pouvez également choisir de sérialiser vos données, puis de les visualiser dans D3.js, comme indiqué ici: Utilisez Python & Pandas pour créer un diagramme de réseau dirigé forcé D3. (Il est accompagné d'un cahier jupyter également!)

Voici le Gist. Vous sérialisez vos données graphiques dans ce format:

import json
json_data = {
  "nodes":[
    {"name":"Myriel","group":1},
    {"name":"Napoleon","group":1},
    {"name":"Mlle.Baptistine","group":1},
    {"name":"Mme.Magloire","group":1},
    {"name":"CountessdeLo","group":1},
  ],
  "links":[
    {"source":1,"target":0,"value":1},
    {"source":2,"target":0,"value":8},
    {"source":3,"target":0,"value":10},
    {"source":3,"target":2,"value":6},
    {"source":4,"target":0,"value":1},
    {"source":5,"target":0,"value":1},
  ]
}
filename_out = 'graph_data.json'
json_out = open(filename_out,'w')
json_out.write(json_data)
json_out.close()

Ensuite, vous chargez les données avec d3.js:

d3.json("pcap_export.json", drawGraph);

Pour la routine drawGraph je vous renvoie cependant au lien.

2
Lutz Büch

Plotly peut faire des trucs sympas pour vous enter image description here

https://plot.ly/

Produit des graphiques hautement interactifs que vous pouvez facilement intégrer aux pages HTML de votre serveur privé ou de votre site Web à l’aide de son API hors ligne.

Mise à jour: Je suis sûr que ses capacités de traçage 3D sont géniales, car les graphiques 2D sont géniaux Merci

2
jax
2
asmaier

Il existe un portage intéressant de NetworkX sur Javascript qui pourrait faire ce que vous voulez. Voir http://felix-kling.de/JSNetworkX/

1
Aric

Voir:

Existe-t-il une bonne bibliothèque de graphes 3D interactifs?

La réponse acceptée suggère le programme suivant, qui a apparemment python bindings: http://ubietylab.net/ubigraph/

Modifier

Je ne suis pas sûr de l'interactivité de NetworkX, mais vous pouvez certainement créer des graphiques 3D. Il y a au moins un exemple dans la galerie:

http://networkx.lanl.gov/examples/drawing/Edge_colormap.html

Et un autre exemple dans les "exemples". Celui-ci, cependant, nécessite que vous ayez Mayavi.

http://networkx.lanl.gov/examples/3d_drawing/mayavi2_spring.html

1
juniper-

J'ai un bon exemple de génération automatique de diagrammes de réseau D3.js avec Python ici: http://brandonrose.org/ner2sna

La bonne chose est que vous vous retrouvez avec HTML et JS générés automatiquement et pouvez incorporer le graphique D3 interactif dans un cahier avec un IFrame

0
brandomr