Библиотека визуализации графиков в JavaScript

500

У меня есть структура данных, представляющая ориентированный граф, и я хочу динамически отображать ее на HTML-странице. Эти графики обычно будут всего лишь несколькими узлами, может быть, десятью в самом верхнем конце, поэтому я предполагаю, что производительность не будет большой. В идеале я хотел бы подключить его с помощью jQuery, чтобы пользователи могли настраивать макет вручную, перетаскивая узлы вокруг.

Примечание. Я не ищу графическую библиотеку.

Теги:
data-structures

5 ответов

892
Лучший ответ

Я только что собрал то, что вы можете искать: http://www.graphdracula.net

Это JavaScript с направленным графическим макетом, SVG, и вы даже можете перетаскивать узлы вокруг. Все еще нуждается в некоторой настройке, но полностью пригоден для использования. Вы можете легко создавать узлы и ребра с помощью кода JavaScript, например:

var g = new Graph();
g.addEdge("strawberry", "cherry");
g.addEdge("cherry", "apple");
g.addEdge("id34", "cherry");

Я использовал ранее упомянутую библиотеку Raphael JS (пример graffle) плюс некоторый код для алгоритма силового построения графа, который я нашел в сети (все с открытым исходным кодом, лицензия MIT). Если у вас есть какие-либо замечания или вам нужна определенная функция, я могу ее реализовать, просто спросите!


Возможно, вы захотите взглянуть и на другие проекты! Ниже приведены два мета-сравнения:

  • SocialCompare имеет обширный список библиотек, а строка "Node/edge graph" будет фильтровать для визуализации графа.

  • DataVisualization.ch оценил многие библиотеки, в том числе нод/граф. К сожалению, прямой ссылки нет, поэтому вам придется отфильтровать по "графику": Изображение 2252

Вот список похожих проектов (некоторые уже упоминались здесь):

Чистые библиотеки JavaScript

  • vis.js поддерживает множество типов сетевых/граничных графиков, а также временные шкалы и 2D/3D-диаграммы. Автоматическая разметка, автоматическая кластеризация, упругий физический движок, дружественная к мобильным устройствам, клавиатурная навигация, иерархическая разметка, анимация и т.д. MIT лицензирована и разработана голландской фирмой, специализирующейся на исследованиях самоорганизующихся сетей.

  • Cytoscape.js - интерактивный анализ и визуализация графиков с поддержкой мобильных устройств в соответствии с соглашениями jQuery. Финансируется за счет грантов NIH и разрабатывается @maxkfranz (см. Его ответ ниже) с помощью нескольких университетов и других организаций.

  • JavaScript InfoVis Toolkit - Jit, интерактивный, многоцелевой фреймворк для рисования графиков и макетов. Смотрите, например, Гиперболическое Дерево. Построенный в Твиттере датавизом архитектором Николасом Гарсия Бельмонте и купленный Сенчей в 2010 году.

  • D3.js Мощная многоцелевая библиотека визуализации JS, наследница Protovis. Смотрите пример принудительно ориентированного графа и другие примеры графа в галерее.

  • Библиотека визуализации JS Plotly использует D3.js с привязками JS, Python, R и MATLAB. Смотрите пример nexworkx в IPython здесь, пример взаимодействия с человеком здесь и API JS Embed.

  • sigma.js Легкая, но мощная библиотека для рисования графиков

  • jsPlumb jQuery плагин для создания интерактивных связанных графов

  • Springy - алгоритм верстки графов

  • Processing.js Javascript порт библиотеки Processing Джон Резиг

  • JS Graph It - перетаскивать прямоугольники, соединенные прямыми линиями. Минимальное автоматическое расположение линий.

  • RaphaelJS Graffle - пример интерактивного графика универсальной многоцелевой библиотеки векторного рисования. RaphaelJS не может автоматически размещать узлы; вам понадобится еще одна библиотека для этого.

  • JointJS Core - библиотека диаграмм с открытым исходным кодом, разработанная Дэвидом Дурманом. Его можно использовать для создания статических диаграмм или полностью интерактивных инструментов создания диаграмм и приложений. Работает в браузерах, поддерживающих SVG. Алгоритмы макета, не входящие в основной пакет

  • mxGraph Ранее коммерческая библиотека диаграмм HTML 5, теперь доступная под Apache v2.0. mxGraph - это базовая библиотека, используемая в draw.io.

Коммерческие библиотеки

  • GoJS Интерактивная библиотека для рисования графиков и макетов

  • yFiles for HTML Коммерческая библиотека для создания графиков и макетов

  • KeyLines Commercial JS инструментарий для визуализации сети

  • ZoomCharts Коммерческая многоцелевая библиотека визуализации

  • Syncfusion JavaScript Diagram Коммерческая библиотека диаграмм для рисования и визуализации.

Заброшенные библиотеки

  • Cytoscape Web Embeddable JS Network Viewer (новые функции не запланированы; сменил Cytoscape.js)

  • Canviz JS рендерер для графов Graphviz. Заброшен в сентябре 2013 года.

  • arbor.js Сложные графики с приятной физикой и приятным глазом. Брошено в мае 2012 года. Существует несколько полуобслуживаемых вилок.

  • jssvggraph "Самый простой из возможных алгоритмов силового ориентированного графа, реализованный в виде библиотеки Javascript, использующей объекты SVG". Заброшен в 2012 году.

  • jsdot Приложение для рисования графа на стороне клиента. Заброшен в 2011 году.

  • Графический инструментарий Protovis для визуализации (JavaScript). Заменено на d3.

  • Представление Moo Wheel Interactive JS для связей и отношений (2008)

  • JSViz скрипт эпохи визуализации 2007 года

  • Макет графика dagre для JavaScript

Не-JavaScript библиотеки

  • 4
    Да, направленные ребра возможны! Используйте g.addEdge ("cherry", "apple", {"Direct": true});
  • 0
    нужно также добавить библиотеку chart.js & chartnew.js. и это ( charts.livegap.com ) генерировать для него
Показать ещё 10 комментариев
42

Отказ от ответственности: я разработчик Cytoscape.js

Cytoscape.js - это библиотека визуализации графики HTML5. API сложный и следует за соглашениями jQuery, включая

  • Селектора
  • для запросов и фильтрации (cy.elements("node[weight >= 50].someClass") делает многое, что и следовало ожидать),
  • цепочка (например, cy.nodes().unselect().trigger("mycustomevent")),
  • jQuery-подобные функции для привязки к событиям,
  • элементы как коллекции (например, jQuery имеет коллекции HTMLDomElements),
  • расширяемость (может добавлять пользовательские макеты, пользовательский интерфейс, функции ядра и коллекции и т.д.),
  • и более.

Если вы думаете о создании серьезного webapp с графиками, вы должны хотя бы рассмотреть Cytoscape.js. Это бесплатно и с открытым исходным кодом:

http://js.cytoscape.org

  • 6
    Все API полностью документированы. Документы даже помогут вам начать работу (например, init). Есть также примеры выполнения отдельных API, и есть живые демонстрации. Функциональность намного выше любой библиотеки графов JS, и документы более обширны, чем большинство проектов - коммерческих или открытых. Что именно вам не хватает в документах?
  • 3
    Хорошо, извини, мой плохой. Я не выглядел должным образом. Да, это хорошо задокументировано.
Показать ещё 4 комментария
36

JsVIS был довольно приятным, но медленным с большими графиками и был оставлен с 2007 года.

prefuse - это набор программных инструментов для создания богатых интерактивных визуализаций данных в Java. flare - это библиотека ActionScript для создания визуализаций, которые запускаются в Adobe Flash Player, которые были оставлены с 2012 года.

  • 2
    Эти библиотеки кажутся немного старыми на данный момент, что люди используют сегодня? Я специально изучаю сюжет независимой серии XY.
  • 22
    -1 - префузия - это Java, а не JavaScript. Flare - это Flash, а не JavaScript. JsVIS глючит и устарел.
Показать ещё 2 комментария
9

В коммерческом сценарии серьезным конкурентом наверняка является yFiles for HTML:

Это предлагает:

  • Простой импорт пользовательских данных (эта интерактивная онлайн-демонстрация, кажется, в значительной степени делает именно то, что искала ОП)
  • Интерактивное редактирование для создания и управления диаграммами с помощью пользовательских жестов (см. Полный редактор)
  • Огромный программный API для настройки каждого аспекта библиотеки
  • Поддержка группировки и вложения (как интерактивных, так и с помощью алгоритмов разметки)
  • Не зависит от конкретного инструментария пользовательского интерфейса, но поддерживает интеграцию практически в любой существующий инструментарий Javascript (см. Демонстрации "интеграция")
  • Автоматическое расположение (различные стили, такие как "иерархический", "органический", "ортогональный", "дерево", "круговой", "радиальный" и т.д.)
  • Автоматическая сложная маршрутизация кромок (ортогональная и органическая маршрутизация кромок с обходом препятствий)
  • Инкрементная и частичная компоновка (добавление и удаление элементов и лишь незначительное изменение или вообще не изменение остальной части диаграммы)
  • Поддержка группировки и вложения (как интерактивных, так и с помощью алгоритмов разметки)
  • Реализации алгоритмов анализа графа (пути, центральности, сетевые потоки и т.д.)
  • Использует технологии HTML 5, такие как SVG + CSS и Canvas, а также современные свойства использования Javascript и другие дополнительные функции ES5 и ES6 (но по той же причине не будет работать в версиях IE 8 и ниже).
  • Использует модульный API, который может быть загружен по требованию с помощью загрузчиков UMD

Вот пример рендеринга, который показывает большинство запрошенных функций:

Изображение 2253

Полное раскрытие: я работаю на yWorks, но в Stackoverflow я не представляю своего работодателя.

  • 3
    Лучший набор алгоритмов, но также и самый закрытый, что делает невозможным использование в проектах с открытым исходным кодом :-(
  • 1
    «Лучшая коллекция», вероятно, соответствует действительности, но «наиболее закрытая» относительна, а «невозможная» неверна: это коммерческая лицензия, поэтому, если проект с открытым исходным кодом не использует вирусную лицензию , его можно использовать в проектах с открытым исходным кодом. Конечно , с помощью проектов с открытым исходным кодом в других проектах с открытым исходным кодом менее проблематично ...
Показать ещё 2 комментария
7

Как упоминал гуруз, JIT имеет несколько прекрасных графиков/деревьев, включая довольно привлекательные визуализации RGraph и HyperTree.

Кроме того, я только что выпустил супер простой SVG-метод в github (без зависимостей, ~ 125 LOC), который должен работают достаточно хорошо для небольших графиков, отображаемых в современных браузерах.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню