wake-up-neo.com

Python Äquivalent zu D3.js

Kann jemand eine Python Bibliothek empfehlen, die eine interaktive Graphvisualisierung durchführen kann?

Ich möchte speziell etwas wie d3.js aber für python und im Idealfall wäre es auch 3D.

Ich habe angeschaut:

  • NetworkX - es werden nur Matplotlib Diagramme erstellt und diese scheinen 2D zu sein. Ich habe keine Art von Interaktivität gesehen, wie eine, die d3.js gibt, wie Knoten herumziehen.
  • Graph-Tool - Es werden nur 2D-Diagramme erstellt und sehr langsame interaktive Graphen.
98

Sie können d3py a python) verwenden, um XML-Seiten zu generieren, in die das Skript d3.js eingebettet ist.

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

Hast du Vincent angeschaut? Vincent nimmt Python Datenobjekte und konvertiert sie in die Vega-Visualisierungsgrammatik. Vega ist ein übergeordnetes Visualisierungstool, das auf D3 aufbaut. Im Vergleich zu D3py wurde das Vincent Repo kürzlich aktualisiert. Die Beispiele sind jedoch alle statisch D3.

mehr Info:


Die Grafiken können in Ipython angezeigt werden, fügen Sie einfach diesen Code hinzu

vincent.core.initialize_notebook()

Oder geben Sie sie in JSON aus, wo Sie das JSON-Ausgabediagramm im Vega-Online-Editor ( http://trifacta.github.io/vega/editor/ ) anzeigen können, oder zeigen Sie sie in Ihrem an Python Server lokal.Weitere Informationen zum Anzeigen finden Sie im obigen Pypi-Link.

Ich weiß nicht wann, aber das Pandas -Paket sollte irgendwann eine D3-Integration haben. http://pandas.pydata.org/developers.html

Bokeh ist eine Python Visualisierungsbibliothek, die interaktive Visualisierung unterstützt. Das primäre Ausgabe-Backend ist HTML5 Canvas und verwendet ein Client/Server-Modell.

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

20
sk8asd123

Ein Rezept, das ich verwendet habe (hier beschrieben: Co-Director-Netzwerkdatendateien in GEXF und JSON von OpenCorporates Data über Scraperwiki und networkx ), lautet wie folgt:

  • generieren Sie eine Netzwerkdarstellung mit networkx
  • exportieren Sie das Netzwerk als JSON-Datei
  • importieren Sie diesen JSON in d3.js. ( networkx kann sowohl die Baum- als auch die Diagramm-/Netzwerkdarstellung exportieren, die d3.js kann importieren).

Der networkx JSON-Exporter hat die Form:

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

Alternativ können Sie das Netzwerk exportieren als [~ # ~] gexf [~ # ~] XML-Datei und diese dann importieren Darstellung in der sigma.js Javascript-Visualisierungsbibliothek.

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

Eine andere Option ist Bokeh , die gerade zu Version 0.3 ging.

16
MrDrFenner

Check out python-nvd . Es ist ein python wrapper für nvd3. Sieht cooler aus als d3.py und hat auch mehr Diagrammoptionen.

5
richie

Für diejenigen, die pyd empfohlen haben, ist es nicht mehr in der aktiven Entwicklung und verweist Sie auf vincent . vincent befindet sich ebenfalls nicht mehr in aktiver entwicklung und empfiehlt die verwendung von altair .

Wenn Sie also einen Pythonic d3 wollen, verwenden Sie altair.

5
Wes

Ich würde vorschlagen, mpld3 zu verwenden, das D3js Javascript-Visualisierungen mit matplotlib von Python kombiniert.

Die Installation und Verwendung ist sehr einfach und es gibt einige coole Plugins und interaktive Dinge.

http://mpld3.github.io/

4
Ram

Sie können Ihre Daten auch serialisieren und dann in D3.js visualisieren, wie hier beschrieben: Verwenden Sie Python & Pandas zum Erstellen eines D3 Force Directed Network Diagram (Es kommt mit einem Jupyter Notebook auch!)

Hier ist der Kern. Sie serialisieren Ihre Grafikdaten in diesem 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()

Dann laden Sie die Daten mit d3.js:

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

Für die Routine drawGraph verweise ich Sie jedoch auf den Link.

2
Lutz Büch

Plotly kann ein paar coole Sachen für dich machen enter image description here

https://plot.ly/

Erzeugt hochgradig interaktive Grafiken, die mithilfe der Offline-API problemlos in die HTML-Seiten Ihres privaten Servers oder Ihrer Website eingebettet werden können.

Update: Ich bin mir sicher, dass die 3D-Darstellungsfunktionen für 2D-Grafiken fantastisch sind. Danke

2
jax
2
asmaier

Es gibt eine interessante Portierung von NetworkX zu Javascript, die tun könnte, was Sie wollen. Siehe http://felix-kling.de/JSNetworkX/

1
Aric

Sehen:

Gibt es eine gute interaktive 3D-Grafikbibliothek?

Die akzeptierte Antwort schlägt das folgende Programm vor, das anscheinend python bindings hat: http://ubietylab.net/ubigraph/

Bearbeiten

Ich bin mir über die Interaktivität von NetworkX nicht sicher, aber Sie können definitiv 3D-Diagramme erstellen. Es gibt mindestens ein Beispiel in der Galerie:

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

Und noch ein Beispiel in den 'Beispielen'. Dies setzt jedoch voraus, dass Sie Mayavi haben.

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

1
juniper-

Ich habe ein gutes Beispiel für das automatische Generieren von D3.js-Netzwerkdiagrammen mit Python hier: http://brandonrose.org/ner2sna

Das Coole ist, dass Sie automatisch generiertes HTML und JS erhalten und das interaktive D3-Diagramm mit einem IFrame in ein Notizbuch einbetten können

0
brandomr