Эквивалент Python для D3.js
Может ли кто-нибудь рекомендовать библиотеку Python, которая может выполнять визуализацию графиков интерактивный?
Я специально хочу что-то вроде d3.js, но для python
и в идеале это будет 3D.
Я посмотрел:
- NetworkX - он делает только графики
Matplotlib
, и они кажутся 2D. Я не видел никакой интерактивности, такой как d3.js
, например, потянув узлы вокруг.
- graph-tool - он делает только 2D-графики и имеет очень медленные интерактивные графики.
Ответы
Ответ 1
Вы можете использовать d3py модуль python, который генерирует вложения xml-страниц d3.js script. Например:
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()
Ответ 2
Plotly поддерживает интерактивные 2D и 3D графики. Графики отображаются с помощью D3.js и могут быть созданы с помощью Python API, matplotlib, ggplot для Python, Seaborn, prettyplotlib и pandas. Вы можете масштабировать, панорамировать, включать и отключать трассировки и просматривать данные о зависании. Графики могут быть встроены в HTML, приложения, панели мониторинга и IPython Notebooks. Ниже представлен график температуры показывающий интерактивность. Более подробную информацию см. В галерее IPython Notebooks учебники.
![enter image description here]()
docs содержит примеры поддерживаемых типов сюжетов и фрагментов кода.
![enter image description here]()
В частности, на ваш вопрос вы также можете сделать интерактивные сюжеты из NetworkX.
![enter image description here]()
Для 3D-графики с помощью Python вы можете сделать 3D-разброс, линию и поверхностные графики, которые так же интерактивны. Графики отображаются с помощью WebGL. Например, см. трехмерный график ставок свопинга в Великобритании.
![enter image description here]()
Раскрытие информации: я нахожусь в команде Plotly.
Ответ 3
Вы посмотрели на Винсента? Винсент берет объекты данных Python и преобразует их в грамматику визуализации Vega. Vega - это инструмент визуализации более высокого уровня, построенный поверх D3. По сравнению с D3py, последнее репо было обновлено совсем недавно. Хотя примеры - все статические D3.
Дополнительная информация:
Графы можно просмотреть в Ipython, просто добавьте этот код
vincent.core.initialize_notebook()
Или вывод в JSON, где вы можете просмотреть выходной график JSON в онлайн-редакторе Vega (http://trifacta.github.io/vega/editor/) или просмотреть их на вашем сервере Python локально. Более подробную информацию о просмотре можно найти в ссылке pypi выше.
Не уверен, когда, но пакет Pandas должен иметь D3-интеграцию в какой-то момент. http://pandas.pydata.org/developers.html
Bokeh - это библиотека визуализации Python, которая поддерживает интерактивную визуализацию. Его основной выходной бэкэнд - HTML5 Canvas и использует модель клиент/сервер.
Примеры : http://continuumio.github.io/bokehjs/
Ответ 4
Один рецепт, который я использовал (описано здесь: Сопутствующие файлы сетевых файлов в GEXF и JSON из OpenCorporates Data через Scraperwiki и networkx) выполняется следующим образом:
- создать сетевое представление с помощью networkx
- экспортировать сеть как файл JSON
- импортируйте JSON в d3.js. (networkx может экспортировать представление дерева и графика/сети, которое может импортировать d3.js).
networkx JSON exporter принимает форму:
from networkx.readwrite import json_graph
import json
print json.dumps(json_graph.node_link_data(G))
В качестве альтернативы вы можете экспортировать сеть в качестве XML файла GEXF, а затем импортировать это представление в sigma.js Библиотека визуализации 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)
Ответ 5
Другой вариант bokeh, который только что пошел в версию 0.3.
Ответ 6
Отъезд python-nvd3. Это оболочка python для nvd3. Выглядит круче, чем d3.py, а также имеет больше вариантов диаграммы.
Ответ 7
Для тех, кто рекомендовал pyd3, он больше не находится в активной разработке и указывает на vincent. vincent также больше не находится в активной разработке и рекомендует использовать altair.
Итак, если вы хотите pythonic d3, используйте altair.
Ответ 8
Я бы предложил использовать mpld3, который объединяет визуализацию D3js javascript с matplotlib python.
Установка и использование на самом деле просты, и в ней есть классные плагины и интерактивные материалы.
http://mpld3.github.io/
Ответ 9
Plotly может сделать для вас классные вещи ![введите описание изображения здесь]()
https://plot.ly/
Производит высокоинтегральные графики, которые можно легко встроить с HTML-страницами для вашего личного сервера или веб-сайта, используя свой API-интерфейс.
Update:
Я не сомневаюсь в возможностях трехмерного построения графиков, поскольку 2D-графики являются удивительными
Спасибо
Ответ 10
Вы также можете выбрать сериализацию своих данных и затем визуализировать их в D3.js, как это сделано здесь: Используйте Python & Pandas для создания сетевой диаграммы D3 Force Directed (она также поставляется с ноутбуком Jupyter !)
Вот суть. Вы сериализуете данные своего графика в этом формате:
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()
Затем вы загружаете данные с помощью d3.js:
d3.json("pcap_export.json", drawGraph);
Однако, для рутины drawGraph
я отсылаю вас по ссылке.
Ответ 11
См:
Есть ли библиотека интерактивного 3D-графика?
В принятом ответе предлагается следующая программа, которая, по-видимому, имеет привязки python: http://ubietylab.net/ubigraph/
Изменить
Я не уверен в интерактивности NetworkX, но вы можете определенно сделать 3D-графики. В галерее есть хотя бы один пример:
http://networkx.lanl.gov/examples/drawing/edge_colormap.html
И еще один пример в "примерах". Однако это требует, чтобы у вас был майяви.
http://networkx.lanl.gov/examples/3d_drawing/mayavi2_spring.html
Ответ 12
Есть интересный порт NetworkX для Javascript, который может делать то, что вы хотите. См. http://felix-kling.de/JSNetworkX/
Ответ 13
Попробуйте https://altair-viz.github.io/ - наследник d3py и vincent. Смотрите также
Ответ 14
У меня есть хороший пример автоматического создания сетевых диаграмм D3.js с использованием Python здесь: http://brandonrose.org/ner2sna
Приятно то, что вы в конечном итоге получаете сгенерированные с помощью HTML и JS и можете встроить интерактивную диаграмму D3 в блокнот с IFrame