Python equivalent of D3.js

前端 未结 15 729
感情败类
感情败类 2021-01-29 17:08

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

I specifically want something like d3.js but for python

相关标签:
15条回答
  • 2021-01-29 17:50

    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.

    0 讨论(0)
  • 2021-01-29 17:50

    The library d3graph will build a force-directed d3-graph from within python. You can "break" the network based on the edge weight, and hover over the nodes for more information. Double click on a node will focus on the node and its connected edges.

    pip install d3graph
    

    Example:

    source = ['node A','node F','node B','node B','node B','node A','node C','node Z']
    target = ['node F','node B','node J','node F','node F','node M','node M','node A']
    weight = [5.56, 0.5, 0.64, 0.23, 0.9,3.28,0.5,0.45]
    
    # Import library
    from d3graph import d3graph, vec2adjmat
    
    # Convert to adjacency matrix
    adjmat = vec2adjmat(source, target, weight=weight)
    print(adjmat)
    # target  node A  node B  node F  node J  node M  node C  node Z
    # source                                                        
    # node A    0.00     0.0    5.56    0.00    3.28     0.0     0.0
    # node B    0.00     0.0    1.13    0.64    0.00     0.0     0.0
    # node F    0.00     0.5    0.00    0.00    0.00     0.0     0.0
    # node J    0.00     0.0    0.00    0.00    0.00     0.0     0.0
    # node M    0.00     0.0    0.00    0.00    0.00     0.0     0.0
    # node C    0.00     0.0    0.00    0.00    0.50     0.0     0.0
    # node Z    0.45     0.0    0.00    0.00    0.00     0.0     0.0
    
    # Example A: simple interactive network
    out = d3graph(adjmat)
    
    # Example B: Color nodes
    out = d3graph(adjmat, node_color=adjmat.columns.values)
    
    # Example C: include node size
    node_size = [10,20,10,10,15,10,5]
    out = d3graph(adjmat, node_color=adjmat.columns.values, node_size=node_size)
    
    # Example D: include node-edge-size
    out = d3graph(adjmat, node_color=adjmat.columns.values, node_size=node_size, node_size_edge=node_size[::-1], cmap='Set2')
    
    # Example E: include node-edge color
    out = d3graph(adjmat, node_color=adjmat.columns.values, node_size=node_size, node_size_edge=node_size[::-1], node_color_edge='#00FFFF')
    
    # Example F: Change colormap
    out = d3graph(adjmat, node_color=adjmat.columns.values, node_size=node_size, node_size_edge=node_size[::-1], node_color_edge='#00FFFF', cmap='Set2')
    
    # Example H: Include directed links. Arrows are set from source -> target
    out = d3graph(adjmat, node_color=adjmat.columns.values, node_size=node_size, node_size_edge=node_size[::-1], node_color_edge='#00FFFF', cmap='Set2', directed=True)
    

    Interactive example from the titanic-case can be found here: https://erdogant.github.io/docs/d3graph/titanic_example/index.html https://erdogant.github.io/hnet/pages/html/Use%20Cases.html

    0 讨论(0)
  • 2021-01-29 17:54

    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:

    • generate a network representation using networkx
    • export the network as a JSON file
    • import that JSON into to d3.js. (networkx can export both the tree and graph/network representations that d3.js can import).

    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)
    
    0 讨论(0)
  • 2021-01-29 17:54

    Another option is bokeh which just went to version 0.3.

    0 讨论(0)
  • 2021-01-29 17:57

    Plotly supports interactive 2D and 3D graphing. Graphs are rendered with D3.js and can be created with a Python API, matplotlib, ggplot for Python, Seaborn, prettyplotlib, 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.

    0 讨论(0)
  • 2021-01-29 18:01

    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:

    • https://github.com/wrobstory/vincent

    • https://pypi.python.org/pypi/vincent/0.1.6


    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/

    0 讨论(0)
提交回复
热议问题