Equivalente em Python de D3.js
alguém pode recomendar uma biblioteca Python que possa fazerinteractive visualização de grafos?
quero especificamente algo como d3.js mas para python
e idealmente seria 3D também.
eu olhei para:
-
NetworkX - ele só faz {[[1]} gráficos e esses parecem ser 2D. eu não vi nenhum tipo de interatividade, como um que
d3.js
dá, tais como puxar nós em torno. - graph-tool - faz apenas 2D plots and has very slow interactive graphs.
14 answers
Você poderia usar d3py um módulo python que gera páginas xml incorporando d3.guião do js. Por exemplo:
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()
Plotly suporta gráficos interactivos 2D e 3D. Os gráficos são desenhados com D3.js e pode ser criado com um API do Python, matplotlib, ggplot para Python, a Seaborn, prettyplotlib, e pandas. Pode ampliar, deslocar, activar ou desactivar os traços, e ver os dados no hover. Os gráficos podem ser incorporados em HTML, aplicativos, painéis e Cadernos de IPython. Abaixo está um gráfico de temperatura mostrando interatividade. Ver a galeria de IPython Blocos de notas tutoriais para mais exemplos.
O docs fornece exemplos de tipos de parcelas suportados e excertos de código.
Especificamente para a sua pergunta, você também pode fazer gráficos interativos a partir do NetworkX.
Para gráficos 3D com Python, você pode fazer gráficos 3D de dispersão, linha e superfície que são igualmente interativos. Os gráficos são renderizado com WebGL. Por exemplo, ver um gráfico 3D das taxas de Swap do Reino Unido.
Mais info:
Os gráficos podem ser visualizados em Ipython, basta adicionar este código
vincent.core.initialize_notebook()
Ou o resultado para o JSON, onde poderá ver o grafo de saída do JSON no editor 'online' do Vega (http://trifacta.github.io/vega/editor/) ou visualizá-las no seu servidor Python localmente. Mais informações sobre a visualização podem ser encontradas na ligação do pypi acima.
Não sei quando, mas o pacote Pandas deve ter integração D3 em algum momento. http://pandas.pydata.org/developers.htmlBokeh é uma biblioteca de visualização em Python que suporta visualização interativa. Sua principal infra-estrutura de saída é a tela HTML5 e usa o modelo cliente / servidor.
Exemplos: http://continuumio.github.io/bokehjs/
Uma receita que usei (descrita aqui: Co-Directora de Ficheiros de dados da rede em GEXF e JSON a partir de dados do OpenCorporates via Scraperwiki e networkx ) é a seguinte:
- gerar uma representação de rede usando networkx
- exportar a rede como um ficheiro JSON
- importem esse JSON para d3.js. (o networkx pode exportar tanto as representações da árvore como do gráfico / rede que d3.js can importar).
A networkx JSON exporter assume a forma:
from networkx.readwrite import json_graph
import json
print json.dumps(json_graph.node_link_data(G))
Em alternativa, pode exportar a rede como um ficheiro GEXF} e depois importar esta representação para o sigma.js biblioteca de visualização em Javascript.
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)
Outra opção é bokeh que acabou de passar para a versão 0.3.
Confira python-nvd3 . É uma embalagem python para nvd3. Parece mais fixe do que d3.py e também tem mais opções de gráficos.
Eu sugeriria usar o mpld3 que combina visualizações de javascript D3js com o matplotlib do python.
A instalação e a utilização são muito simples e têm alguns plugins fixes e coisas interactivas.
Plotly pode fazer algumas coisas legais para você
Produz gráficos altamente interactivos que podem ser facilmente incorporados nas páginas HTML para o seu servidor privado ou website usando a sua API off-line.
Actualizar: Eu estou certo sobre suas capacidades de desenho 3D, para gráficos 2D é incrível Obrigado.
Existe uma porta interessante de NetworkX para Javascript que pode fazer o que você quer. Ver http://felix-kling.de/JSNetworkX/
Ver:
Existe uma biblioteca de grafos 3D interativos por aí?
A resposta aceite sugere o seguinte programa, que aparentemente tem ligações em python: http://ubietylab.net/ubigraph/
Editar
Eu Não tenho certeza sobre a interatividade do NetworkX, mas você pode definitivamente fazer gráficos 3D. Há pelo menos um exemplo no galeria:
Http://networkx.lanl.gov/examples/drawing/edge_colormap.html
E outro exemplo nos 'exemplos'. Este, no entanto, requer que tenha o Mayavi.
Http://networkx.lanl.gov/examples/3d_drawing/mayavi2_spring.html
Também pode optar por serializar os seus dados e visualizá-los em D3.js, como feito aqui: Use Python & Pandas para criar um diagrama de rede de força D3 (Ele vem com um bloco de notas jupyter também!)
Eis o essencial. Você serializa os seus dados do Gráfico neste formato: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()
Depois carrega os dados com d3.js:
d3.json("pcap_export.json", drawGraph);
No entanto, para a rotina, remeto-te para a ligação.
A coisa fixe é que você acaba com HTML e JS auto-gerados e pode incorporar o gráfico D3 interactivo num notebook com um IFrame