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:
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.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()
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/
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:
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)
Eine andere Option ist Bokeh , die gerade zu Version 0.3 ging.
Check out python-nvd . Es ist ein python wrapper für nvd3. Sieht cooler aus als d3.py und hat auch mehr Diagrammoptionen.
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.
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.
Plotly kann ein paar coole Sachen für dich machen
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
Versuchen Sie https://altair-viz.github.io/ - den Nachfolger von d3py und vincent. Siehe auch
Es gibt eine interessante Portierung von NetworkX zu Javascript, die tun könnte, was Sie wollen. Siehe http://felix-kling.de/JSNetworkX/
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
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