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 dad3.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.
Hay un puerto interesante de NetworkX para Javascript que podría hacer lo que quiera. Ver http://felix-kling.de/JSNetworkX/
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.
Pruebe https://altair-viz.github.io/ - el sucesor de d3py y vincent. Ver también
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.
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
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