Визуализация графов
смотрел наНужно средство для отрисовки графа с фиксированными координатами вершин. Graphviz не подходит: там можно задать координаты вершин, но он их иногда игнорирует (слишком умный). Еще бы неплохо иметь возможность задавать точные размеры вершин (graphviz-у иногда кажется, что вершина слишком маленькая, и он ее увеличивает).Это все настраивается в графвизе.
1. Фиксированные координаты:
"aaa" [pos ="X,Y"];
Отрисовывать чтобы не сбивались с опцией -n=2
dot -n=2 ...
2. Фиксированный размер вершины задается командой fixedsize, например:
"aaa" [ fixedsize="true",width="1.2",height="1"]
Если нужно для всех вершин одинакого, то можно написать
node [ fixedsize="true",width="1.2",height="1"]
PS
на сколько умно он после этого расставляет ребра хз
сделать чтобы не налезали друг на друга можно,
есть какие-то команды типа overlap=false но я не помню точно.
Только neato (который, вопреки документации, умеет рисовать направленные графы). Вот пример:
digraph G {
node [shape=rectangle];
splines=true;
sep=.1;
n1[label="1", pos="100,100"];
n2[label="2", pos="200,200", shape=circle];
n3[label="3", pos="300,300"];
n4[label="4", pos="200,250"];
n5[label="5", pos="200,150"];
n6[label="6", pos="265,200"];
n1->n3
n1->n2
n2->n3
n5->n4
}
Теперь хотелось бы, чтобы ребра не касались вершин. Параметр sep игнорируется.
если ставить pin=true, то элемент не будет перемещаться. Т.е. -n2 можно убрать.
Как бороться с тем чтобы ребра не касались вершин - х.з. Единственное что приходит в голову - в место вершин можно подставлять картинки с белыми полями при помощи shapefile .
Кстати, нашел стандартную опцию для отключения перемещения pos-ов:Хрен там. Переставляет как хочет.
если ставить pin=true, то элемент не будет перемещаться. Т.е. -n2 можно убрать.
У них в рассылке где-то было обсуждение, что алгоритм размещения вершин (в dot ? или во всех программах) принципиально не работает с pin=true.
или с ним они тоже не пашут?
Именно с ним. Остальные -n2 и pin полностью игнорируют, а neato, такое ощущение, что старается разместить вершины как указано, но чуть ему что-то не нравится - сдвигает.
Посмотрел. Насколько я понял, там ребра всегда прямые.
Оставить комментарий
ppplva
Нужно средство для отрисовки графа с фиксированными координатами вершин. Graphviz не подходит: там можно задать координаты вершин, но он их иногда игнорирует (слишком умный). Еще бы неплохо иметь возможность задавать точные размеры вершин (graphviz-у иногда кажется, что вершина слишком маленькая, и он ее увеличивает).По сути, нужно просто соединить вершины _изогнутыми_ ребрами так, чтобы они (ребра) не наползали на другие вершины. Самому это писать не очень-то просто, или я ошибаюсь ? Вершины - прямоугольники.
Решение никому показывать не нужно, так что сойдет какой-нибудь хак, вроде graphviz-а с оторванным интеллектом Кто-нибудь пробовал читать исходники, насколько это сложно сделать ?
Может быть, существует готовое решение ? Посоветуйте мне что-нибудь.