[graphviz] - рисование диаграмм

+
-
edit
 

Balancer

администратор
★★★★☆
Автоматически формирует диаграмму связи объектов. Пример офлайнового использования см. на Граф репутации старого форума



Код:
code text
  1. [graphviz]digraph G {
  2. a->b
  3. b->c
  4. b->d
  5. d->a
  6. }[/graphviz]




Исходный код:
code text
  1. [graphviz]
  2. digraph G {
  3.     Tico->israel [label="+7"]
  4.     Balancer->israel [label="+9"]
  5.     Balancer->Tico [label="+6"]
  6.     israel->TEvg [label="-6"]
  7.     TEvg->Balancer [label="+3"]
  8.     Tico [style=filled color=Green]
  9.     israel [style=filled color=Green]
  10.     TEvg [style=filled color=Yellow]
  11. }
  12. [/graphviz]


Используется разметка пакета Graphviz: Graphviz | Graphviz - Graph Visualization Software
 
+
-
edit
 

Balancer

администратор
★★★★☆
Сильно улучшено качество + работает поддержка русского. Пример большой диаграммы с русским: О наследовании
 
+
-
edit
 

HolyBoy

опытный

Balancer> Используется разметка пакета Graphviz: Graphviz | Graphviz - Graph Visualization Software

Ром, скажи, пожалуйста, с какими параметрами у тебя генерируется ориентированный граф так, чтобы не создавались пересечения ребер? Я для своих нужд пытался разные алгоритмы использовать: dot, neato и прочие, пытался внутри файла задавать size побольше и ratio = "expand", но всё равно для небольшого количества графов получается либо куча пересечений, либо каша. Такое впечатление, что утилита в первую очередь пытается ужать по размерам, а потом только минимизировать количество связей, а мне хочется наоборот. В твоих графах, как мне кажется, как раз то и выводится, что мне надо.
 
+
-
edit
 

Mishka

модератор
★★☆
HolyBoy> но всё равно для небольшого количества графов получается либо куча пересечений, либо каша. Такое впечатление, что утилита в первую очередь пытается ужать по размерам, а потом только минимизировать количество связей, а мне хочется наоборот. В твоих графах, как мне кажется, как раз то и выводится, что мне надо.

В теории графов есть теоремка, что не всякий граф можно на плоскости представить без пересечений рёбер. Графы, которые можно изобразить на плоскости без пересечений рёбер называются плоским. Если есть изоморфизм данного графа в какой-то плоский, то этот граф называют планарным — Планарный граф — Википедия.

Если правильно помню, то Теорема Понтрягина—Куратовского поможет тебе, хотя и трудоёмко.
Потерялась подпись. © Brab
Нашедшего прошу вернуть за небольшое вознаграждение ... переслаными байтами.  7.0.17.0.1
+
-
edit
 

HolyBoy

опытный

HolyBoy> для небольшого количества графов

Тьфу, ты, конечно же нод.
 
+
-
edit
 

HolyBoy

опытный

Mishka> В теории графов есть теоремка, что не всякий граф можно на плоскости представить без пересечений рёбер.

Да, я знаю и понимаю, что не всегда без пересечений получается, но! Ты посмотри, что выходит у меня, можно же хотя бы разнести ноды и рёбра так, чтобы они не мешались в кучу.

Код [показать]



Отрисовано форумом [показать]



В аттаче — то, что выходит у меня после команды dot -Tsvg:cairo my.dot > out.svg Видишь, к примеру, нода "16161616161 16" в самом низу и стрелка к ней выглядят чуть иначе, чем то, что отрисовал форум Ромы? Вот я и думаю, что какие-то параметры позволяют изменить расположение нод так, чтобы рёбра не путались, пусть даже и пересечение неизбежно.
Прикреплённые файлы:

out.svg (скачать) [60,73 кбайт, 174 загрузки] [attach=263892]
 
Это сообщение редактировалось 10.02.2012 в 22:29
+
-
edit
 

Balancer

администратор
★★★★☆
HolyBoy> Ром, скажи, пожалуйста, с какими параметрами у тебя генерируется ориентированный граф так, чтобы не создавались пересечения ребер?

Исходник в graphviz.php in classes/bors/image/generated – BORS©
code php
  1. system("/usr/bin/dot -Tpng -o{$fname_image} {$fname_src}");


fname_src — то, что в текст между тэгами вводится.

Так что, всё что dot может.. А что конкретно — это уже не ко мне, я не разбирался с ним :)
 
+
-
edit
 

Balancer

администратор
★★★★☆
Два упрощения. Во-первых, теперь можно использовать упрощённый синоним [graph]...[/graph], во-вторых, не обязательно писать Graphviz-обвязку. Можно сразу начинать писать зависимости:

code text
  1. [graph]
  2. a->b->c
  3. b->d
  4. e->d
  5. [/graph]


выдаст в итоге:

 2525

в начало страницы | новое
Поиск
Настройки
Персональное
Твиттер сайта
Статистика
Рейтинг@Mail.ru