2010-03-18 2 views
11

Я пытаюсь нарисовать график, показывающий поисковые префиксы с помощью twopi. У меня есть простой входной файл и я получаю этот выход:Схема управления с использованием graphviz twopi

alt text http://www.freeimagehosting.net/uploads/th.ac6cd51528.png (full image)

Вот входной файл:

digraph search { 

// ordering=out; 
// color=blue; 
// rank=same; 
// overlap=scale; 
rankdir=LR; 
root=root; 
ranksep=1.25; 
overlap=true; 

"root"; 

a [color=none,fontsize=12]; 
b [color=none,fontsize=12]; 
c [color=none,fontsize=12]; 
d [color=none,fontsize=12]; 
e [color=none,fontsize=12]; 
f [color=none,fontsize=12]; 
#g [color=none,fontsize=12]; 
h [color=none,fontsize=12]; 
i [color=none,fontsize=12]; 
j [color=none,fontsize=12]; 
k [color=none,fontsize=12]; 
l [color=none,fontsize=12]; 
m [color=none,fontsize=12]; 
n [color=none,fontsize=12]; 
o [color=none,fontsize=12]; 
p [color=none,fontsize=12]; 
q [color=none,fontsize=12]; 
r [color=none,fontsize=12]; 
s [color=none,fontsize=12]; 
t [color=none,fontsize=12]; 
u [color=none,fontsize=12]; 
v [color=none,fontsize=12]; 
w [color=none,fontsize=12]; 
x [color=none,fontsize=12]; 
y [color=none,fontsize=12]; 

#ga [color=none,fontsize=12]; 
gb [color=none,fontsize=12]; 
gc [color=none,fontsize=12]; 
gd [color=none,fontsize=12]; 
ge [color=none,fontsize=12]; 
gf [color=none,fontsize=12]; 
gg [color=none,fontsize=12]; 
gh [color=none,fontsize=12]; 
gi [color=none,fontsize=12]; 
gj [color=none,fontsize=12]; 
gk [color=none,fontsize=12]; 
gl [color=none,fontsize=12]; 
gm [color=none,fontsize=12]; 
gn [color=none,fontsize=12]; 
go [color=none,fontsize=12]; 
gp [color=none,fontsize=12]; 
gq [color=none,fontsize=12]; 
gr [color=none,fontsize=12]; 
gs [color=none,fontsize=12]; 
gt [color=none,fontsize=12]; 
gu [color=none,fontsize=12]; 
gv [color=none,fontsize=12]; 
gw [color=none,fontsize=12]; 
gx [color=none,fontsize=12]; 
gy [color=none,fontsize=12]; 

gaa [color=none,fontsize=12]; 
gab [color=none,fontsize=12]; 
gac [color=none,fontsize=12]; 
gad [color=none,fontsize=12]; 
gae [color=none,fontsize=12]; 
gaf [color=none,fontsize=12]; 
gag [color=none,fontsize=12]; 
gah [color=none,fontsize=12]; 
gai [color=none,fontsize=12]; 
gaj [color=none,fontsize=12]; 
gak [color=none,fontsize=12]; 
gal [color=none,fontsize=12]; 
gam [color=none,fontsize=12]; 
gan [color=none,fontsize=12]; 
gao [color=none,fontsize=12]; 
gap [color=none,fontsize=12]; 
gaq [color=none,fontsize=12]; 
#gaz [color=none,fontsize=12]; 
gas [color=none,fontsize=12]; 
gat [color=none,fontsize=12]; 
gau [color=none,fontsize=12]; 
gav [color=none,fontsize=12]; 
gaw [color=none,fontsize=12]; 
gax [color=none,fontsize=12]; 
gay [color=none,fontsize=12]; 

gaza [color=none,fontsize=12]; 
gazb [color=none,fontsize=12]; 
gazc [color=none,fontsize=12]; 
gazd [color=none,fontsize=12]; 
gaze [color=none,fontsize=12]; 
#gazf [color=none,fontsize=12]; 
gazg [color=none,fontsize=12]; 
gazh [color=none,fontsize=12]; 
gazi [color=none,fontsize=12]; 
gazj [color=none,fontsize=12]; 
gazk [color=none,fontsize=12]; 
gazl [color=none,fontsize=12]; 
gazm [color=none,fontsize=12]; 
gazn [color=none,fontsize=12]; 
gazo [color=none,fontsize=12]; 
gazp [color=none,fontsize=12]; 
gazq [color=none,fontsize=12]; 
gazr [color=none,fontsize=12]; 
gazs [color=none,fontsize=12]; 
gazt [color=none,fontsize=12]; 
gazu [color=none,fontsize=12]; 
gazv [color=none,fontsize=12]; 
gazw [color=none,fontsize=12]; 
gazx [color=none,fontsize=12]; 
gazy [color=none,fontsize=12]; 

root -> a [minlen=2]; 
root -> b [minlen=2]; 
root -> c [minlen=2]; 
root -> d [minlen=2]; 
root -> e [minlen=2]; 
root -> f [minlen=2]; 
root -> g [minlen=2]; 
root -> h [minlen=2]; 
root -> i [minlen=2]; 
root -> j [minlen=2]; 
root -> k [minlen=2]; 
root -> l [minlen=2]; 
root -> m [minlen=2]; 
root -> n [minlen=2]; 
root -> o [minlen=2]; 
root -> p [minlen=2]; 
root -> q [minlen=2]; 
root -> r [minlen=2]; 
root -> s [minlen=20]; 
root -> t [minlen=2]; 
root -> u [minlen=2]; 
root -> v [minlen=2]; 
root -> w [minlen=2]; 
root -> x [minlen=2]; 
root -> y [minlen=2]; 
root -> 0 [minlen=2]; 
root -> 1 [minlen=2]; 
root -> 2 [minlen=2]; 
root -> 3 [minlen=2]; 
root -> 4 [minlen=2]; 
root -> 5 [minlen=2]; 
root -> 6 [minlen=2]; 
root -> 7 [minlen=2]; 
root -> 8 [minlen=2]; 
root -> 9 [minlen=2]; 
root -> "." [minlen=2]; 

g -> ga ; 
g -> gb ; 
g -> gc ; 
g -> gd ; 
g -> ge ; 
g -> gf ; 
g -> gg ; 
g -> gh ; 
g -> gi ; 
g -> gj ; 
g -> gk ; 
g -> gl ; 
g -> gm ; 
g -> gn ; 
g -> go ; 
g -> gp ; 
g -> gq ; 
g -> gr ; 
g -> gs ; 
g -> gt ; 
g -> gu ; 
g -> gv ; 
g -> gw ; 
g -> gx ; 
g -> gy ; 

ga -> gaa ; 
ga -> gab ; 
ga -> gac ; 
ga -> gad ; 
ga -> gae ; 
ga -> gaf ; 
ga -> gag ; 
ga -> gah ; 
ga -> gai ; 
ga -> gaj ; 
ga -> gak ; 
ga -> gal ; 
ga -> gam ; 
ga -> gan ; 
ga -> gao ; 
ga -> gap ; 
ga -> gaq ; 
ga -> gaz ; 
ga -> gas ; 
ga -> gat ; 
ga -> gau ; 
ga -> gav ; 
ga -> gaw ; 
ga -> gax ; 
ga -> gay ; 

gaz -> gaza ; 
gaz -> gazb ; 
gaz -> gazc ; 
gaz -> gazd ; 
gaz -> gaze ; 
gaz -> gazf ; 
gaz -> gazg ; 
gaz -> gazh ; 
gaz -> gazi ; 
gaz -> gazj ; 
gaz -> gazk ; 
gaz -> gazl ; 
gaz -> gazm ; 
gaz -> gazn ; 
gaz -> gazo ; 
gaz -> gazp ; 
gaz -> gazq ; 
gaz -> gazr ; 
gaz -> gazs ; 
gaz -> gazt ; 
gaz -> gazu ; 
gaz -> gazv ; 
gaz -> gazw ; 
gaz -> gazx ; 
gaz -> gazy ; 

gazo -> "Blue Tuesday" ; 
"Blue Tuesday" [ fontsize=10]; 

// Layout engines: circo dot fdp neato nop nop1 nop2 osage patchwork sfdp twopi 

} 

Этот выход генерируется с:

twopi -os1.png -Tpng s1.dot 

I 'm posting here, потому что распечатка довольно ужасна. Все узлы, висящие на «газе», перекрываются; Я пробовал указать nodesep, и он просто игнорируется. Я хотел бы видеть строки от корня до одиночных букв дальше друг от друга, но опять же, я не могу этого контролировать.

Это похоже на ошибку в twopi. В документации говорится, что он должен четко следовать этим директивам, но, похоже, это не так.

Мои вопросы:

  1. Есть ли способ сделать twopi себя?
  2. В противном случае, есть ли лучший механизм компоновки для использования?

Спасибо.

ответ

17

Я нашел twopi самым трудным для работы с всеми механизмами компоновки graphviz.

Я сделал несколько небольших изменений в вашем исходном файле точек. Отображаемый график показан ниже.

Вот дифференциалы:

графа атрибуты:

  • размер = "7.75,10.25"; // гарантирует, что весь график подходит для одной страницы 8.5 x 11;

  • ориентация = "пейзаж";

  • ranksep = 3.0; nodesep = 2.0;

  • удалено: «корень = корень»; и "Перекрытие = истина"

край атрибуты:

  • я установить вес края, равную 0,1 для всех ребер: [вес = 0.1]

Снижение веса кромки на 90% для всех ребер имеет чистый эффект увеличения длины кромки (или более точно, ослабляя ограничение на длину ребра); очевидно, это помогает узлам «разгоняться». Это также увеличивает расстояние между «g» и «root», давая дочерним узлам «root» больше места.

Я также переделан несколько чисто эстетических атрибутов - не оказывает влияния на макете, но мне кажется важным, когда вам нужно сделать даже умеренно плотный график на одной странице:

Графические атрибуты:

fontname = "Helvetica"; FontSize = 13

узла атрибуты:

"корень" [цвет = "goldenrod4", форма = "алмаз", стиль = "заполнен"]

"г" [цвет =» lightsteelblue2" , форма = "алмаз", стиль = "заполнено"]

"га" [color = "darkorange", форма = "алмаз", стиль = "заполнено"]

"газ" [цвет = "bisque4", shape = "diamond", style = "fill"]

край атрибуты:

[arrowsize = 0,4, PenWidth = 1,2] alt text

+0

спасибо. twopi явно глючит. Если бы была другая альтернатива, я бы пошел с ней. Какие-либо предложения? – vy32

+2

ну ... мне не пришло в голову использовать twopi для рендеринга такого графа, но, увидев его, я думаю, что у вас есть правильная идея. FWIW, для чего-то вроде вашего графика, моя первая мысль заключалась в том, чтобы использовать движок «circo» (также в семействе graphviz - должен быть в вашей сборке). – doug

+0

Я пробовал 'circo' и не был доволен результатами. Но спасибо! – vy32