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.
Author: akaihola, 2012-10-19

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()
 55
Author: Vincent Agnus, 2013-12-01 20:34:29

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.

enter image description here



O docs fornece exemplos de tipos de parcelas suportados e excertos de código.



enter image description here

Especificamente para a sua pergunta, você também pode fazer gráficos interativos a partir do NetworkX.

enter image description here

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.



enter image description here

Estou na equipa de planeamento.
 26
Author: Mateo Sanchez, 2015-06-03 08:48:34
Já viste o vincent? Vincent pega objetos de dados Python e os converte para a gramática de visualização Vega. Vega é uma ferramenta de visualização de alto nível construída em cima de D3. Em comparação com o D3py, o Acordo de recompra vincent foi atualizado mais recentemente. Embora os exemplos sejam todos estáticos D3.

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.html

Bokeh é 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/

 19
Author: sk8asd123, 2013-11-20 17:44:37

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)
 16
Author: psychemedia, 2013-03-16 23:56:37

Outra opção é bokeh que acabou de passar para a versão 0.3.

 14
Author: MrDrFenner, 2013-11-21 18:37:53

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.

 5
Author: richie, 2013-08-23 13:07:30

Para aqueles que recomendaram pyd3, já não está em desenvolvimento activo e aponta para vincent. o vincent também já não está em desenvolvimento activo e recomenda a utilização de altair.

Se queres um D3 pythonic, usa o altair.

 5
Author: Wes, 2016-11-11 14:54:17

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.

Http://mpld3.github.io/

 3
Author: Ram, 2015-02-09 11:45:35

Plotly pode fazer algumas coisas legais para vocêenter image description here

Https://plot.ly/

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.

 3
Author: jax, 2017-05-17 05:26:27

Existe uma porta interessante de NetworkX para Javascript que pode fazer o que você quer. Ver http://felix-kling.de/JSNetworkX/

 1
Author: Aric, 2012-10-24 22:31:11

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

 1
Author: juniper-, 2017-05-23 12:03:02

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.
 1
Author: Lutz Büch, 2018-06-14 21:59:52
Tenho um bom exemplo de gerar automaticamente D3.diagramas de rede js usando Python aqui: http://brandonrose.org/ner2sna

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

 0
Author: brandomr, 2017-07-11 17:04:30