编程语言
首页 > 编程语言> > Python equivalent of D3.js

Python equivalent of D3.js

作者:互联网

Python equivalent of D3.js

Ask Question Asked 7 years, 1 month ago Active 10 months ago Viewed 90k times 99

Can anyone recommend a Python library that can do interactive graph visualization?

I specifically want something like d3.js but for python and ideally it would be 3D as well.

I have looked at:

    shareimprove this question edited Dec 12 '16 at 12:03 akaihola 21.9k55 gold badges5151 silver badges6060 bronze badges asked Oct 19 '12 at 15:26 Eiyrioü von Kauyf 3,07044 gold badges2626 silver badges3737 bronze badges   add a comment

14 Answers

activeoldestvotes 68

You could use d3py a python module that generate xml pages embedding d3.js script. For example :

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()
shareimprove this answer edited Dec 1 '13 at 20:34 Eric O Lebigot 70.7k3838 gold badges179179 silver badges229229 bronze badges answered Jan 5 '13 at 23:59 Vincent Agnus 91677 silver badges99 bronze badges   add a comment 38

Plotly supports interactive 2D and 3D graphing. Graphs are rendered with D3.js and can be created with a Python APImatplotlibggplot for PythonSeabornprettyplotlib, and pandas. You can zoom, pan, toggle traces on and off, and see data on the hover. Plots can be embedded in HTML, apps, dashboards, and IPython Notebooks. Below is a temperature graph showing interactivity. See the gallery of IPython Notebooks tutorials for more examples.

enter image description here



The docs provides examples of supported plot types and code snippets.



enter image description here

Specifically to your question, you can also make interactive plots from NetworkX.

enter image description here

For 3D plotting with Python, you can make 3D scatter, line, and surface plots that are similarly interactive. Plots are rendered with WebGL. For example, see a 3D graph of UK Swap rates.



enter image description here

Disclosure: I'm on the Plotly team.

shareimprove this answer edited Jun 3 '15 at 8:48     answered Nov 6 '13 at 2:13 Mateo Sanchez 1,3111212 silver badges1515 bronze badges   add a comment 20

Have you looked at vincent? Vincent takes Python data objects and converts them to Vega visualization grammar. Vega is a higher-level visualization tool built on top of D3. As compared to D3py, the vincent repo has been updated more recently. Though the examples are all static D3.

more info:


The graphs can be viewed in Ipython, just add this code

vincent.core.initialize_notebook()

Or output to JSON where you can view the JSON output graph in the Vega online editor (http://trifacta.github.io/vega/editor/) or view them on your Python server locally. More info on viewing can be found in the pypi link above.

Not sure when, but the Pandas package should have D3 integration at some point. http://pandas.pydata.org/developers.html

Bokeh is a Python visualization library that supports interactive visualization. Its primary output backend is HTML5 Canvas and uses client/server model.

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

shareimprove this answer edited Nov 20 '13 at 17:44     answered Oct 10 '13 at 19:28 sk8asd123 1,2351111 silver badges1111 bronze badges   add a comment 17

One recipe that I have used (described here: Co-Director Network Data Files in GEXF and JSON from OpenCorporates Data via Scraperwiki and networkx ) runs as follows:

The networkx JSON exporter takes the form:

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

Alternatively you can export the network as a GEXF XML file and then import this representation into the sigma.js Javascript visualisation 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)
shareimprove this answer answered Mar 16 '13 at 23:56 psychemedia 3,77944 gold badges3737 silver badges6969 bronze badges   add a comment 16

Another option is bokeh which just went to version 0.3.

shareimprove this answer answered Nov 21 '13 at 18:37 MrDrFenner 68088 silver badges1010 bronze badges   add a comment 7

For those who recommended pyd3, it is no longer under active development and points you to vincent. vincent is also no longer under active development and recommends using altair.

So if you want a pythonic d3, use altair.

shareimprove this answer answered Nov 11 '16 at 14:54 Wes 38844 silver badges1212 bronze badges   add a comment 5

Check out python-nvd3. It is a python wrapper for nvd3. Looks cooler than d3.py and also has more chart options.

shareimprove this answer answered Aug 23 '13 at 13:07 richie 8,46888 gold badges3939 silver badges5858 bronze badges   add a comment 4

I would suggest using mpld3 which combines D3js javascript visualizations with matplotlib of python.

The installation and usage is really simple and it has some cool plugins and interactive stuffs.

http://mpld3.github.io/

shareimprove this answer answered Feb 9 '15 at 11:45 Ram 54466 silver badges1818 bronze badges   add a comment 4

Try https://altair-viz.github.io/ - the successor of d3py and vincent. See also

shareimprove this answer edited Jan 23 at 13:39     answered Apr 6 '18 at 14:50 asmaier 8,09977 gold badges5858 silver badges8888 bronze badges   add a comment 2

Plotly can do some cool stuffs for you enter image description here

https://plot.ly/

Produces highly interactive graphs that can be easily embedded withing the HTML pages for your private server or website using its off line API.

Update: I am note sure about its 3D plotting capabilities, for 2D graphs is awesome Thanks

shareimprove this answer answered May 17 '17 at 5:26 jax 2,05544 gold badges2020 silver badges4343 bronze badges   add a comment 2

You can also choose to serialize your data and then visualize it in D3.js, as done here: Use Python & Pandas to Create a D3 Force Directed Network Diagram (It comes with a jupyter notebook as well!)

Here is the gist. You serialize your graph data in this 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()

Then you load the data in with d3.js:

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

For the routine drawGraph I refer you to the link, however.

shareimprove this answer edited Jun 14 '18 at 21:59 Pearly Spencer 19.7k2121 gold badges5454 silver badges101101 bronze badges answered Jun 13 '18 at 9:06 Lutz Büch 18811 silver badge99 bronze badges   add a comment 1

There is an interesting port of NetworkX to Javascript that might do what you want. See http://felix-kling.de/JSNetworkX/

shareimprove this answer answered Oct 24 '12 at 22:31 Aric 18.1k44 gold badges4949 silver badges6262 bronze badges   add a comment 1

See:

Is there a good interactive 3D graph library out there?

The accepted answer suggests the following program, which apparently has python bindings: http://ubietylab.net/ubigraph/

Edit

I'm not sure about the interactivity of NetworkX, but you can definitely make 3D graphs. There is at least one example in the gallery:

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

And another example in the 'examples'. This one, however, requires that you have Mayavi.

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

shareimprove this answer edited May 23 '17 at 12:03 Community♦ 111 silver badge answered Oct 19 '12 at 15:33 juniper- 4,41655 gold badges2727 silver badges4848 bronze badges   add a comment 0

I've got a good example of automatically generating D3.js network diagrams using Python here: http://brandonrose.org/ner2sna

The cool thing is that you end up with auto-generated HTML and JS and can embed the interactive D3 chart in a notebook with an IFrame

shareimprove this answer answered Jul 11 '17 at 1 <style></style>

标签:sheet,Python,equivalent,share,popover,answer,data,D3,se
来源: https://www.cnblogs.com/cx2016/p/12011045.html