[image]

[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> но всё равно для небольшого количества графов получается либо куча пересечений, либо каша. Такое впечатление, что утилита в первую очередь пытается ужать по размерам, а потом только минимизировать количество связей, а мне хочется наоборот. В твоих графах, как мне кажется, как раз то и выводится, что мне надо.

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

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

HolyBoy

аксакал

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

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

HolyBoy

аксакал

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

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

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



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



В аттаче — то, что выходит у меня после команды dot -Tsvg:cairo my.dot > out.svg Видишь, к примеру, нода "16161616161 16" в самом низу и стрелка к ней выглядят чуть иначе, чем то, что отрисовал форум Ромы? Вот я и думаю, что какие-то параметры позволяют изменить расположение нод так, чтобы рёбра не путались, пусть даже и пересечение неизбежно.
Прикреплённые файлы:
out.svg (скачать) [61 кБ]
 
 
   
Это сообщение редактировалось 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
RU Dmb_2007 #22.06.2017 00:21  @Balancer#30.05.2013 02:09
+
-
edit
 

Dmb_2007

аксакал
★☆
Попытка ответить с цитированием приводит к выпадению ошибки (прилагаю)
Не прилагается ...
Тогда так


Fatal error: Uncaught Exception: PDO error on query [INSERT INTO bors_image_generated (`hash_id`,`generator_class_name`,`generator_data`,`description`,`base_name`,`image_url`,`dir`,`width`,`height`,`create_time`,`modify_time`,`owner_id`,`last_editor_id`) VALUES ('1c37f0e1c8fe02df3bd60dde22e24bf8','bors_image_generated_graphviz','s:49:"digraph G { \n a->b->>c\n b->>d\n e->>d\nBalancer> }";',NULL,'1c37f0e1c8fe02df3bd60dde22e24bf8.png','/c/g/1c37f0e1c8fe02df3bd60dde22e24bf8.png','/var/www/balancer.ru/htdocs/c/g',NULL,NULL,'1498078919','1498078919','4726','4726') ]: Array ( [0] => 23000 [1] => 1048 [2] => Column 'description' cannot be null ) in /var/www/bors/composer-tests/vendor/balancer/bors-core/classes/driver/pdo.php:98 Stack trace: #0 /var/www/bors/composer-tests/vendor/balancer/bors-core/classes/driver/mysql.php(153): driver_pdo->query('INSERT INTO bor...', false) #1 /var/www/bors/composer-tests/vendor/balancer/bors-core/classes/bors/storage/mysql.php(724): driver_mysql->insert('bors_image_gene...', Ar in /var/www/bors/composer-tests/vendor/balancer/bors-core/classes/driver/pdo.php on line 98
 
   59.0.3071.10959.0.3071.109

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