d3py python graph d3.js graph-tool

d3py - Python equivalente a D3.js



graph graph-tool (14)

¿Has mirado a Vincent? Vincent toma los objetos de datos de Python y los convierte a la gramática de visualización de Vega. Vega es una herramienta de visualización de alto nivel construida sobre D3. En comparación con D3py, el repositorio vincent se ha actualizado más recientemente. Aunque los ejemplos son todos estáticos D3.

más información:

Los gráficos se pueden ver en Ipython, simplemente agrega este código

vincent.core.initialize_notebook()

O envíe a JSON donde puede ver el gráfico de salida JSON en el editor en línea de Vega ( http://trifacta.github.io/vega/editor/ ) o verlos en su servidor Python localmente. Se puede encontrar más información sobre visualización en el enlace de pypi anterior.

No estoy seguro de cuándo, pero el paquete Pandas debería tener integración D3 en algún momento. http://pandas.pydata.org/developers.html

Bokeh es una biblioteca de visualización de Python que admite la visualización interactiva. Su backend de salida principal es HTML5 Canvas y utiliza un modelo de cliente / servidor.

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

¿Alguien puede recomendar una biblioteca Python que pueda hacer visualización gráfica interactiva ?

Específicamente, quiero algo como d3.js pero para python e idealmente también sería 3D.

He visto:

  • NetworkX : solo hace gráficas de Matplotlib y esas parecen ser 2D. No vi ningún tipo de interactividad, como la que da d3.js , como sacar nodos.
  • graph-tool : solo hace trazados 2D y tiene gráficos interactivos muy lentos.

Echa un vistazo a python-nvd3 . Es un contenedor de Python para nvd3. Se ve más fresco que d3.py y también tiene más opciones de gráfico.



Otra opción es bokeh que acaba de pasar a la versión 0.3.


Para aquellos que recomendaron d3py , ya no está en desarrollo activo y lo señala a https://github.com/wrobstory/vincent . Vincent ya no está en desarrollo activo y recomienda usar altair .

Entonces, si quieres un pythonic d3, usa altair.


Plotly admite gráficos interactivos en 2D y 3D. Los gráficos se representan con D3.js y se pueden crear con una API de Python , matplotlib , ggplot para Python , Seaborn , prettyplotlib y pandas . Puede acercar, alejar, alternar rastros y ver datos en el vuelo estacionario. Los diagramas se pueden incrustar en HTML, aplicaciones, paneles y cuadernos IPython. A continuación se muestra un gráfico de temperatura que muestra la interactividad. Vea la galería de tutorials de IPython Notebooks para más ejemplos.



Los docs proporcionan ejemplos de tipos de gráficos admitidos y fragmentos de código.





Específicamente para su pregunta, también puede hacer trazados interactivos desde NetworkX.



Para trazar 3D con Python, puede hacer trazados 3D de dispersión, línea y superficie que son igualmente interactivos. Los trazados se representan con WebGL. Por ejemplo, vea un gráfico 3D de las tasas de cambio del Reino Unido.



Divulgación: estoy en el equipo de Plotly.



Puede usar d3py un módulo python que genere páginas xml que incorporen el script d3.js. Por ejemplo :

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()


Sugiero usar mpld3, que combina visualizaciones de JavaScript D3js con matplotlib de python.

La instalación y el uso es realmente simple y tiene algunos complementos interesantes y productos interactivos.

http://mpld3.github.io/


También puede optar por serializar sus datos y luego visualizarlos en D3.js, como se hace aquí: Usar Python y Pandas para crear un diagrama de red dirigido por la fuerza D3 (¡También viene con un cuaderno jupyter !)

Aquí está la esencia. Usted serializa los datos de su gráfico en este 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()

Luego carga los datos con d3.js:

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

Para la rutina drawGraph lo remito al enlace, sin embargo.


Tengo un buen ejemplo de generación automática de diagramas de red D3.js usando Python aquí: http://brandonrose.org/ner2sna

Lo bueno es que terminas con HTML y JS autogenerados y puedes incrustar el gráfico D3 interactivo en un cuaderno con un IFrame


Una receta que he usado (descrita aquí: Co-Director Network Data Files en GEXF y JSON de OpenCorporates Data a través de Scraperwiki y networkx ) se ejecuta de la siguiente manera:

  • generar una representación de red usando networkx
  • exportar la red como un archivo JSON
  • importar ese JSON en d3.js ( networkx puede exportar las representaciones de árbol y gráfico / red que puede importar d3.js ).

El exportador de redes JSON toma la forma:

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

Alternativamente, puede exportar la red como un archivo XML GEXF y luego importar esta representación en la biblioteca de visualización de JavaScript sigma.js .

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)


Ver:

¿Hay una buena biblioteca interactiva de gráficos 3D por ahí?

La respuesta aceptada sugiere el siguiente programa, que aparentemente tiene enlaces de python: http://ubietylab.net/ubigraph/

Editar

No estoy seguro de la interactividad de NetworkX, pero definitivamente puedes hacer gráficos 3D. Hay al menos un ejemplo en la galería:

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

Y otro ejemplo en los ''ejemplos''. Este, sin embargo, requiere que tengas a Mayavi.

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


Plotly puede hacer cosas geniales para ti

https://plot.ly/

Produce gráficos altamente interactivos que pueden incorporarse fácilmente a las páginas HTML de su servidor privado o sitio web utilizando su API fuera de línea.

Actualización: estoy seguro de sus capacidades de trazado 3D, para los gráficos 2D es increíble Gracias