Лекция 1.6. Графвиз — различия между версиями

Материал из Wiki
Перейти к:навигация, поиск
 
(не показано 107 промежуточных версий 4 участников)
Строка 1: Строка 1:
 +
'''Graphviz''' - набор утилит для графического представления данных.
 +
Программа  принимает описания отношений и элементов множеств, на которых определяется граф, и "добавляет" к этим лишенным всяких геометрических атрибутов описаниям дополнительную информацию, позволяющую "нарисовать" картинку графа.
  
 +
Для использования Графвиз требуется использовать примитивный язык описания графов dgl.
 +
Основные понятия:
 +
* граф,
 +
* вершина графа -- элемент множества,
 +
* ребро графа, соединяющее вершину N с вершиной M
  
<graphviz>
+
== Быстрый старт ==
digraph G
+
 
{
+
Входной файл для программы «DOT» является обычным текстовым файлом на специальном языке разметки графа. Структура файла очень простая, например,
graph [bgcolor=Snow2];
+
 
rankdir=LR;
+
<nowiki> <graphviz>  
node[color="Pink",fontsize=8, fontcolor="blue",style=filled, shape="none"];
+
digraph G{
edge[color="Brown",fontcolor="Green",fontsize=8];
+
Рождение->Юность->Зрелость->Старость->Смерть;
Ярославль -> Кострома -> "Нижний Новгород" -> Казань -> Сызрань [dir=both, label="Волга"];
+
Юность->Смерть;
"Нижний Новгород" -> Дзержинск [style=dotted, label="Ока",arrowhead="dot" ];
+
Зрелость->Смерть;
Казань -> Елабуга [label="Кама", color="Green:blue:red"];
+
}
Ярославль [shape=Mdiamond], Сызрань [shape=Msquare], Кострома [shape=circle],
+
</graphviz></nowiki>
"Нижний Новгород" [shape = doublecircle],Казань[shape=hexagon,color=green];
+
 
{rank=same; Елабуга Дзержинск Сызрань };
+
на выходе будет:
 +
 
 +
<graphviz>
 +
digraph G{
 +
Рождение->Юность->Зрелость->Старость->Смерть;
 +
Юность->Смерть;
 +
Зрелость->Смерть;
 
}
 
}
 
</graphviz>
 
</graphviz>
  
 +
Программа «Dot» сама распознает все связи графа и упорядочит его таким образом, чтобы было наименьшее количество пересечений.
  
Графвиз
+
Если у вас узлы поименованы словосочетаниями, заключите их в кавычки, например:
Программа сама распознает все связи графа и упорядочит его таким образом, чтобы было наименьшее количество пересечений.
 
  
Простейший граф
+
<nowiki> <graphviz>
   
+
  digraph G{
Свойства графа
+
"Сидоров Пётр Фёдорович" -> "Сидоров Иван Петрович" [label="отец"];
Для того, граф было удобнее просматривать, можно настроить следующие свойства. Например:
+
"Сидорова Анна Павловна " -> "Сидоров Иван Петрович" [label="мать"];
 Направленность графа:
+
  }  
 rankdir=LR - слева-направо
+
</graphviz></nowiki>
 rankdir=TB - сверху вниз
 
 ratio=auto - отношение = авто;
 
 Цвет фона графа - graph [bgcolor=Snow2] - окрашивает фон в цвет - "серый снег"  
 
 Свойства (node)узлов - node[color="Pink",fontsize=10, style=filled, fontcolor="blue", shape="none"] (Сочетание двух и более слов записывается в кавычки - "Нижний Новгород")
 
 color="Pink" - цвет = розовый (Таблице цветов)
 
 fontsize=8 - размер шрифта = 8
 
 style=filled - стиль = заполненный (без неё узел прозрачен)
 
 fontcolor="blue" - цвет шрифта = голубой
 
 shape="none" - форма = "без формы"  
 
 Формы узла [shape=?] - invtriangle - треугольник вершиной вниз; box - прямоугольник; ellipse - эллипс; invtrapezium - перевёрнутая трапеция; triangle - треугольник; trapezium - трапеция; record - ; doubleoctagon - двойной восьмиугольник ; octagon - восьмиугольник; tripleoctagon - тройной восьмиугольник (Все формы)
 
 Ярославль [shape=Mdiamond] - узлу Ярославль придаётся форма ромба(алмаз)
 
 Сызрань [shape=Msquare] - узлу Сызрань придаётся форма квадрата
 
 Кострома [shape=circle] - узлу Кострома придаётся форма круга
 
 "Нижний Новгород" [shape=doublecircle] - узлу "Нижний Новгород" придаётся форма двойного круга
 
 Казань [shape=hexagon,color=green] - узлу Казань придаётся форма шестиугольника и зелёный цвет
 
 Управление положением узлов - {rank=same; Елабуга Дзержинск Сызрань ;} - узлам Елабуга, Дзержинск, Сызрань предан разряд = тот же самый; ranksep=3 - расстояние между разрядами;
 
 Свойства(edge)ребер - edge[color="blue",fontcolor="Green",fontsize=12]
 
 color="Brown" - цвет = коричневый
 
 color="Green:blue:red" - трёхцветие (возможно любое количество)
 
 dir=both - направление стрелки в две стороны
 
 fontsize=8 - размер шрифта = 8
 
 fontcolor="blue" - цвет шрифта = зелёный
 
 style=dotted - стиль = пунктирная линия
 
 arrowhead="dot" - голова стрелки = "точка", "none" - нет (Все формы)
 
 Ярлык ребра [label="Волга"] - все связи Ярославль -> ... -> Сызрань будут помечены меткой Волга.
 
  
 
<graphviz>
 
<graphviz>
 +
digraph G{
 +
"Сидоров Пётр Фёдорович" -> "Сидоров Иван Петрович" [label="отец"];
 +
"Сидорова Анна Павловна " -> "Сидоров Иван Петрович" [label="мать"];
 +
}
 +
</graphviz>
 +
 +
==Свойства графа==
 +
 +
Для того, граф было удобнее просматривать, можно настроить следующие  свойства. Например:
 +
* Направленность графа:
 +
**'''rankdir=LR''' - слева-направо
 +
**'''rankdir=TB''' - сверху вниз
 +
**'''ratio=auto''' - отношение = авто;
 +
*'''Цвет фона графа''' - graph [bgcolor=Snow2] - окрашивает фон в цвет - "серый снег"
 +
* '''Свойства''' (node) '''узлов''' - node[color="Pink",fontsize=10, style=filled, fontcolor="blue",  shape="none"] (Сочетание двух и более слов записывается в кавычки - '''"Нижний Новгород"''')
 +
** '''color="Pink"''' - цвет = розовый ([[Цвета в Вики]])
 +
** '''fontsize=8''' - размер шрифта = 8
 +
** '''style=filled''' - стиль = заполненный (без неё узел прозрачен)
 +
** '''fontcolor="blue"''' - цвет шрифта = голубой
 +
** '''shape="none"''' - форма = "без формы"
 +
*** '''Формы узла [shape=?]''' - '''invtriangle''' - треугольник вершиной вниз; '''box''' - прямоугольник; '''ellipse''' - эллипс; '''invtrapezium''' - перевёрнутая трапеция; '''triangle''' - треугольник;  '''trapezium''' - трапеция; '''octagon''' - восьмиугольник; '''tripleoctagon''' - тройной восьмиугольник ([http://www.graphviz.org/doc/info/shapes.html Все формы])
 +
** '''Ярославль [shape=Mdiamond]''' - узлу Ярославль придаётся форма ромба(алмаз)
 +
** '''Сызрань [shape=Msquare]''' - узлу Сызрань придаётся форма квадрата
 +
** '''Кострома [shape=circle]''' - узлу Кострома придаётся форма круга
 +
** '''"Нижний Новгород" [shape=doublecircle]''' - узлу "Нижний Новгород" придаётся форма двойного круга
 +
** '''Казань [shape=hexagon,color=green]''' - узлу Казань придаётся форма шестиугольника и зелёный цвет
 +
* Управление положением узлов - '''{rank=same; Елабуга Дзержинск Сызрань ;}''' - узлам Елабуга, Дзержинск, Сызрань предан  разряд = тот же самый;  '''ranksep=3''' - расстояние между разрядами;
 +
* '''Свойства''' (edge) '''ребер''' - edge[color="blue",fontcolor="Green",fontsize=12]
 +
** '''color="Brown"''' - цвет = коричневый
 +
*** '''color="Green:blue:red"''' - трёхцветие (возможно любое количество)
 +
**  '''dir=both''' - направление стрелки в две стороны
 +
** '''fontsize=8''' - размер шрифта = 8
 +
** '''fontcolor="blue"''' - цвет шрифта = зелёный
 +
** '''style=dotted''' - стиль = пунктирная линия
 +
** '''arrowhead="dot"''' - голова стрелки = "точка", "none" - нет ([http://www.graphviz.org/doc/info/arrows.html Все формы])
 +
* '''Ярлык ребра''' [label="Волга"] - все связи  '''Ярославль -> ... -> Сызрань'''  будут помечены меткой Волга. 
 +
 +
 +
 +
'''''Пример:'''''
 +
 +
<nowiki><graphviz>
 
  digraph G{
 
  digraph G{
 
  graph [bgcolor=Snow2];
 
  graph [bgcolor=Snow2];
Строка 66: Строка 96:
 
  {rank=same; Елабуга Дзержинск Сызрань ;}
 
  {rank=same; Елабуга Дзержинск Сызрань ;}
 
  }
 
  }
 +
</graphviz></nowiki>
 +
 +
'''''Результат:'''''
 +
 +
<graphviz>
 +
digraph G{
 +
graph [bgcolor=Snow2];
 +
rankdir=LR ;
 +
node[color="Pink",fontsize=8, fontcolor="blue",style=filled, shape="none"] ;
 +
edge[color="Brown",fontcolor="Green",fontsize=8] ;
 +
Ярославль -> Кострома -> "Нижний Новгород" -> Казань -> Сызрань [dir=both, label="Волга"];
 +
"Нижний Новгород" -> Дзержинск [style=dotted, label="Ока",arrowhead="dot" ] ;
 +
Казань -> Елабуга [label="Кама", color="Green:blue:red"] ;
 +
Ярославль [shape=Mdiamond], Сызрань [shape=Msquare], Кострома [shape=circle];
 +
"Нижний Новгород" [shape = doublecircle],Казань[shape=hexagon,color=green]
 +
{rank=same; Елабуга Дзержинск Сызрань ;}
 +
}
 
  </graphviz>
 
  </graphviz>
 
Гипертекстовые ссылки на страницы
 
Ссылки на внутренние страницы устанавливаются прямым связыванием:
 
 "Нижний Новгород" [URL="Нижний Новгород"]
 
 Гугл [URL="http://www.google.com"]
 
Кроме того, мы можем в начале графа указать, что все элементы поименованные в графе должны ссылаться на страницы с соответстующим названием.
 
node [URL="/index.php/\N"] ;
 
После этого можно просто указывать имена узлов, а гипертекстовые ссылки добавятся к ним автоматически.
 
Для того, чтобы имя заметки на ребре так же становилось ссылкой на страницу, необходимо дополнить метку ссылкой [label="Волга", URL="Волга"]. В графе, который представлен ниже все узлы и метки являются гиперссылками.
 
 
________________________________________
 
 Масштабный пример - Карта книги жизни
 
  
 +
== [http://lib.custis.ru/index.php/Graphviz Побробнее о Graphviz] ==
  
[[Категория:Семинар]]
+
[[Категория:Веб 2.0]]

Текущая версия на 10:00, 19 февраля 2015

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

Для использования Графвиз требуется использовать примитивный язык описания графов dgl. Основные понятия:

  • граф,
  • вершина графа -- элемент множества,
  • ребро графа, соединяющее вершину N с вершиной M

Быстрый старт

Входной файл для программы «DOT» является обычным текстовым файлом на специальном языке разметки графа. Структура файла очень простая, например,

 <graphviz> 
 digraph G{
 Рождение->Юность->Зрелость->Старость->Смерть;
 Юность->Смерть;
 Зрелость->Смерть;
 }
 </graphviz>

на выходе будет:

<graphviz> digraph G{ Рождение->Юность->Зрелость->Старость->Смерть; Юность->Смерть; Зрелость->Смерть; } </graphviz>

Программа «Dot» сама распознает все связи графа и упорядочит его таким образом, чтобы было наименьшее количество пересечений.

Если у вас узлы поименованы словосочетаниями, заключите их в кавычки, например:

 <graphviz>
 digraph G{
 "Сидоров Пётр Фёдорович" -> "Сидоров Иван Петрович" [label="отец"];
 "Сидорова Анна Павловна " -> "Сидоров Иван Петрович" [label="мать"];
 } 
 </graphviz>

<graphviz>

digraph G{
"Сидоров Пётр Фёдорович" -> "Сидоров Иван Петрович" [label="отец"];
"Сидорова Анна Павловна " -> "Сидоров Иван Петрович" [label="мать"];
} 
</graphviz>

Свойства графа

Для того, граф было удобнее просматривать, можно настроить следующие свойства. Например:

  • Направленность графа:
    • rankdir=LR - слева-направо
    • rankdir=TB - сверху вниз
    • ratio=auto - отношение = авто;
  • Цвет фона графа - graph [bgcolor=Snow2] - окрашивает фон в цвет - "серый снег"
  • Свойства (node) узлов - node[color="Pink",fontsize=10, style=filled, fontcolor="blue", shape="none"] (Сочетание двух и более слов записывается в кавычки - "Нижний Новгород")
    • color="Pink" - цвет = розовый (Цвета в Вики)
    • fontsize=8 - размер шрифта = 8
    • style=filled - стиль = заполненный (без неё узел прозрачен)
    • fontcolor="blue" - цвет шрифта = голубой
    • shape="none" - форма = "без формы"
      • Формы узла [shape=?] - invtriangle - треугольник вершиной вниз; box - прямоугольник; ellipse - эллипс; invtrapezium - перевёрнутая трапеция; triangle - треугольник; trapezium - трапеция; octagon - восьмиугольник; tripleoctagon - тройной восьмиугольник (Все формы)
    • Ярославль [shape=Mdiamond] - узлу Ярославль придаётся форма ромба(алмаз)
    • Сызрань [shape=Msquare] - узлу Сызрань придаётся форма квадрата
    • Кострома [shape=circle] - узлу Кострома придаётся форма круга
    • "Нижний Новгород" [shape=doublecircle] - узлу "Нижний Новгород" придаётся форма двойного круга
    • Казань [shape=hexagon,color=green] - узлу Казань придаётся форма шестиугольника и зелёный цвет
  • Управление положением узлов - {rank=same; Елабуга Дзержинск Сызрань ;} - узлам Елабуга, Дзержинск, Сызрань предан разряд = тот же самый; ranksep=3 - расстояние между разрядами;
  • Свойства (edge) ребер - edge[color="blue",fontcolor="Green",fontsize=12]
    • color="Brown" - цвет = коричневый
      • color="Green:blue:red" - трёхцветие (возможно любое количество)
    • dir=both - направление стрелки в две стороны
    • fontsize=8 - размер шрифта = 8
    • fontcolor="blue" - цвет шрифта = зелёный
    • style=dotted - стиль = пунктирная линия
    • arrowhead="dot" - голова стрелки = "точка", "none" - нет (Все формы)
  • Ярлык ребра [label="Волга"] - все связи Ярославль -> ... -> Сызрань будут помечены меткой Волга.


Пример:

<graphviz>
 digraph G{
 graph [bgcolor=Snow2];
 rankdir=LR ; // направление графа слева направо
 node[color="Pink",fontsize=8, fontcolor="blue",style=filled, shape="none"] ;
 edge[color="Brown",fontcolor="Green",fontsize=8] ;
 Ярославль -> Кострома -> "Нижний Новгород" -> Казань -> Сызрань [dir=both, label="Волга"];
 "Нижний Новгород" -> Дзержинск [style=dotted, label="Ока",arrowhead="dot" ] ;
 Казань -> Елабуга [label="Кама", color="Green:blue:red"] ;
 Ярославль [shape=Mdiamond], Сызрань [shape=Msquare], Кострома [shape=circle];
 "Нижний Новгород" [shape = doublecircle],Казань[shape=hexagon,color=green]
 {rank=same; Елабуга Дзержинск Сызрань ;}
 }
 </graphviz>

Результат:

<graphviz>

digraph G{
graph [bgcolor=Snow2];
rankdir=LR ; 
node[color="Pink",fontsize=8, fontcolor="blue",style=filled, shape="none"] ;
edge[color="Brown",fontcolor="Green",fontsize=8] ;
Ярославль -> Кострома -> "Нижний Новгород" -> Казань -> Сызрань [dir=both, label="Волга"];
"Нижний Новгород" -> Дзержинск [style=dotted, label="Ока",arrowhead="dot" ] ;
Казань -> Елабуга [label="Кама", color="Green:blue:red"] ;
Ярославль [shape=Mdiamond], Сызрань [shape=Msquare], Кострома [shape=circle];
"Нижний Новгород" [shape = doublecircle],Казань[shape=hexagon,color=green]
{rank=same; Елабуга Дзержинск Сызрань ;}

}

</graphviz>

Побробнее о Graphviz