Équivalent Python de D3.js

est-ce que quelqu'un peut recommander une bibliothèque Python qui peut faire interactive graph visualization?

je veux spécifiquement quelque chose comme d3.js mais pour python et idéalement il serait 3D aussi bien.

j'ai regardé:

  • NetworkX - il ne fait Matplotlib parcelles et ceux semblent être 2D. Je n'ai vu aucune sorte de interactivité, comme celle que d3.js donne, comme tirer des noeuds autour.
  • graphe-outil - il ne fait que des tracés 2D et a très lent interactif graphiques.
80
demandé sur akaihola 2012-10-19 19:26:16

14 réponses

vous pouvez utiliser d3py un module python qui génère des pages xml intégrant d3.js script. 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()
55
répondu Vincent Agnus 2013-12-01 20:34:29

supporte Plotly graphique 2D et 3D interactive. Les graphiques sont rendus avec D3.js, et peut être créé avec une API Python , matplotlib , ggplot pour Python , Seaborn , prettyplotlib , et pandas . Vous pouvez zoomer, balancer, basculer des traces sur et Hors, et voir des données sur le vol stationnaire. Les graphiques peuvent être intégrés dans HTML, applications, tableaux de bord, et IPython Notebooks. Ci-dessous, un graphique de température montrant l'interactivité. Voir la galerie de IPython Cahiers tutoriels pour plus d'exemples.



enter image description here





Le docs fournit des exemples de prises en charge de la parcelle les types et les morceaux de code.





enter image description here



Spécifiquement à votre question, vous pouvez également faire des parcelles interactives de NetworkX.



enter image description here



Pour le pointage 3D avec Python, vous pouvez faire la diffusion 3D, des tracés de ligne et de surface qui sont également interactifs. Les tracés sont rendus avec WebGL. Par exemple, voir un graphique en 3D des taux de Swap du Royaume-Uni.





enter image description here

Divulgation: je suis sur le Plotly de l'équipe.

26
répondu Mateo Sanchez 2015-06-03 08:48:34

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 haut niveau construit sur D3. Par rapport au D3py, le vincent repo a été mis à jour plus récemment. Bien que les exemples soient tous statiques D3.

complément d'information:


les graphiques peuvent être consultés en Ipython, il suffit d'ajouter ce code

vincent.core.initialize_notebook()

ou sortie vers JSON où vous pouvez visualiser le graphique de sortie JSON dans L'éditeur en ligne Vega ( http://trifacta.github.io/vega/editor / ) ou les afficher sur votre serveur Python localement. Plus d'informations sur l'affichage peuvent être trouvées dans le lien pypi ci-dessus.

Je ne sais pas quand, mais le paquet Pandas devrait avoir l'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. Sa sortie principale est HTML5 Canvas et utilise le modèle client / serveur.

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

19
répondu sk8asd123 2013-11-20 17:44:37

une recette que j'ai utilisée (décrite ici: co-directeur des fichiers de données de réseau dans GEXF et JSON à partir de données OpenCorporates via Scraperwiki et networkx ) s'exécute comme suit:

  • générer une représentation de réseau à l'aide de networkx
  • exporter le réseau comme un fichier JSON
  • importer que JSON dans d3.js . ( networkx peut exporter à la fois les représentations d'arbre et de graphe/réseau que d3.js peut importer).

le networkx JSON exporter prend la forme:

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

alternativement vous pouvez exporter le réseau comme un GEXF fichier XML et ensuite importer cette représentation dans le Sigma.js Javascript visualization library.

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)
16
répondu psychemedia 2013-03-16 23:56:37

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

14
répondu MrDrFenner 2013-11-21 18:37:53

Check out python-nvd3 . C'est un enveloppeur python pour nvd3. Ça a l'air plus cool que d3.py et a également plus d'options de diagramme.

5
répondu richie 2013-08-23 13:07:30

pour ceux qui ont recommandé pyd3 , 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
répondu Wes 2016-11-11 14:54:17

je suggère d'utiliser mpld3 qui combine les visualisations javascript D3js avec matplotlib de python.

l'installation et l'utilisation est vraiment simple et il a quelques plugins cool et interactive stuffs.

http://mpld3.github.io /

3
répondu Ram 2015-02-09 11:45:35

Plotly peut faire quelques belles choses pour vous enter image description here

https://plot.ly /

produit des graphiques hautement interactifs qui peuvent être facilement intégrés avec les pages HTML pour votre serveur privé ou site Web en utilisant son API off line.

mise à Jour: Je suis sûr de ses capacités de pointage 3D, pour 2D graphiques est génial Merci

3
répondu jax 2017-05-17 05:26:27

il y a un port intéressant de NetworkX à Javascript qui pourrait faire ce que vous voulez. Voir http://felix-kling.de/JSNetworkX/

1
répondu Aric 2012-10-24 22:31:11

voir:

y a-t-il une bonne bibliothèque interactive de graphiques en 3D?

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

Modifier

Je ne suis pas sûr de l'interactivité de NetworkX, mais vous pouvez certainement faire 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 le 'exemples'. Celui-ci, cependant, exige que vous avez Mayavi.

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

1
répondu juniper- 2017-05-23 12:03:02

vous pouvez également choisir de sérialiser vos données et de les visualiser dans D3.js, comme le fait ici: utilisez Python & Pandas pour créer un D3 Force Directed Network Diagramme (il est livré avec un Jupyter notebook ainsi!)

Voici l'essentiel. 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()

puis vous chargez les données avec d3.js:

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

pour la routine drawGraph je vous renvoie au lien, cependant.

1
répondu Lutz Büch 2018-06-14 21:59:52

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

ce qui est cool, c'est que vous vous retrouvez avec le HTML généré automatiquement et JS et pouvez intégrer le tableau D3 interactif dans un ordinateur portable avec une IFrame

0
répondu brandomr 2017-07-11 17:04:30