Оптимизированное рисование графиков для Интернета

StackOverflow https://stackoverflow.com/questions/562018

Вопрос

Увидев некоторый предложения что касается графиков, мне интересно, что является оптимальным для моей проблемы.

Я хочу визуализировать направленный граф в сервлет/изображение, отображаемое в браузере.Должна быть какая-то оптимизация позиции.Никакой зависимости от 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, который, очевидно, предназначен для этой цели:

http://www.graphviz.org/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, так что, возможно, он вам подойдет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top