Оптимизированное рисование графиков для Интернета
-
05-09-2019 - |
Вопрос
Увидев некоторый предложения что касается графиков, мне интересно, что является оптимальным для моей проблемы.
Я хочу визуализировать направленный граф в сервлет/изображение, отображаемое в браузере.Должна быть какая-то оптимизация позиции.Никакой зависимости от Swing нежелательно.Алгоритмы не важны, поскольку структура графа определяется бизнес-логикой.Было бы желательно иметь возможность добавлять метки и к краям.было бы оптимально, если бы я мог обработать это как png/svg.
Какую библиотеку/услугу вы бы порекомендовали?
уточнения:
1) Вопрос весь в Графах - типа Направленный ациклический граф - НЕТ - Графики.
2) flot, Google Charts - нельзя строить графики, только диаграммы, или я что-то пропустил?
3) нет, мне не нужна интерактивность
4) было бы неплохо использовать графвиз, но Java-библиотека граппы сильно устарела и построена на основе Swing/awt.Хотя теоретически возможно визуализировать колебание в изображениях, это не мой любимый способ сделать это в серверном приложении.
5) было бы неплохо использовать онлайн-сервис, где изображения не размещаются локально.
редактировать:добавлены ссылки на Википедию для пояснения термина «график/диаграмма»
Решение
Помимо ожидания недель, чтобы услышать о Magic Framework, который решит все ваши проблемы в одной строке кода, есть также другой вариант — просто написать код самостоятельно, чтобы сделать именно то, что вы хотите...(Я не говорю, что это 10-минутная работа, но, вероятно, это один или два дня, а вы задали свой вопрос более двух недель назад...)
Взгляните ли вы, например, на статью в Википедии на Алгоритмы, основанные на силе-- у него есть псевдокод и несколько ссылок, которые могут быть полезны.
Я предполагаю, что проблема заключается в алгоритме компоновки, а не в создании BufferedImage, рисовании в его графическом контексте, его PNG-кодировании и отправке в сокет.Вам действительно не нужна структура для что немного, я не думаю.
Другие советы
Взгляни на графвиз
yFiles может быть для этого полезен.
А как насчет точечного компонента Graphviz?Он создает графики (не диаграммы), выводит их в форматы PNG и SVG и поддерживает маркировку краев.Вы можете использовать команду dot для создания нужного изображения и вернуть тег img, который ссылается на него.Альтернативно вы можете вернуть тег img, который ссылается на URL-адрес, который сгенерирует необходимый график (или получит кэшированную копию).Вот информация о точках:
http://www.graphviz.org/pdf/dotguide.pdf
Вы также можете взглянуть на WebDot, который, очевидно, предназначен для этой цели:
Пытаться aiSee.Он используется всеми видами веб-приложений для сбор данных, статический анализ программы, матричная визуализация, сетевой анализ, и что "нет.Его также используют некоторые МедиаВики в качестве бэкэнда для графического макета.
У них огромная база данных примеры графиков на aiSee.com.Проверьте это.Он поддерживает метки краев, экспорт в преобразованные SVG и HTML и не зависит от Swing.
Мы создаем mxGraph для таких требований.На самом деле мы выпустили его в 2006 году, но потребовалось некоторое время, чтобы заметить этот вопрос...
Для серверная часть, пытаться Юнг, вы можете запустить его против Батик и создавать красивые файлы SVG или PNG.У JUNG приятный дизайн и очень мощные алгоритмы компоновки...
Кроме того, поскольку вы упомянули об этом "было бы неплохо использовать Интернет Сервис", Graphviz предоставляет услугу под названием веб-точка для рендеринга графиков.
Есть и другие в этом направлении...например http://graph.gafol.net/ (кажется, упал)
Сторона клиента:
Пытаться http://arborjs.org/ для минимальной (почти) библиотеки она посвящена макету, используйте ее, если вам нравятся собственные процедуры рендеринга (div, Canvas, svg, paper.js, обработка...и т. д).
Мне также нравится http://sigmajs.org/ для более полного подхода встройте сенсорную поддержку, плагины, форматы файлов и т. д.
Интересно, что проект Eclipse имеет компонент/инфраструктуру SWT/JFace, способный отображать и генерировать (импортировать/экспортировать) формат Graphviz 'DOT' на чистой Java:
ZEST (домашняя страница и ссылки для скачивания)
Видеть http://wiki.eclipse.org/Graphviz_DOT_as_a_DSL_for_Zest для примеров использования.
Хотя ZEST рекламируется как плагин Eclipse, похоже, что API-интерфейсы DOT-манипуляции могут использоваться автономно и вне установки Eclipse.
Ваше здоровье
Богатый
Вы можете попробовать sigma.js: http://sigmajs.org/
Это легкая библиотека с открытым исходным кодом на Javascript для отображения больших графиков в Интернете.
JPGD-файл — это парсер Graphviz на Java.Это маленький заброшен, но код красивый и понятный, и если вы обнаружите ошибки, я уверен, что автор примет внесенные исправления.
Хотя он рекламируется как парсер, он также является генератором.Вы можете создавать графики как коллекции объектов Node и Edge, а затем получать .dot с помощью Graph.toString().Получение этого в виде графики было бы простой оболочкой для исполняемого файла Graphviz dot.
Альтернативно, точку очень легко создать самостоятельно.В простейшем случае это всего лишь вопрос написания встроенного заголовка.
digraph myGraph {
...за которым следует одно определение ребра для каждого ребра
node1 -> node2 ;
...за которым следует закрывающая скобка
}
Возможно, проверьте Google Диаграммы?
Вы можете использовать SVG в сочетании с Батиком.Я использовал это несколько раз для отображения графики.Батик с Явой 1.5 работает очень быстро.С помощью этого решения вы можете программировать свой график на Java, не завися от Swing.Вы можете добавлять метки там, где хотите, размещать их как сервлет и отображать в формате png или svg.
Вы можете создавать графики в SVG (это XML-документ).
Ты используешь Батик преобразовать SVG-документ в изображение PNG/JPG.
Вы можете использовать сервлет для потоковой передачи этого изображения обратно в браузер.
В Java вы создаете документ SVG(=XML).Примеры графиков SVG можно найти здесь:Ориентированный граф и здесь: Простой ориентированный граф
Видеть этот вопрос, особенно ответ Стефана о префузе.Я читал, что интерактивность не нужна, но префуз все равно может пригодиться.
Я могу от всей души рекомендовать плавать - отличный!
Видеть примеры здесь.
JFreeChart возможно, вы хотите пойти по этому пути, но вы проводите различие между диаграммами и графиками.Может быть, вы сможете объяснить, что вы имеете в виду.Обычно я использовал эти термины как синонимы.:)
JFreeChart имеет хорошие диаграммы разброса, гистограммы и линии, а также забавные графики, такие как Pie и Dial, так что, возможно, он вам подойдет.