如何在点图中调整边缘方向?

时间:2011-05-28 16:16:48

标签: graphviz dot

在询问之前,我试图搜索我的问题的答案,但我找不到。 我的问题是关于改变点图中的边缘方向。 Rankdir是'LR',但在图的某些部分,我想使用'TB'。让我举个例子。

digraph G {
  rankdir=LR;
  size="7,5";
  browser->ui_thread;
  browser->db_thread;
  browser->webkit_thread;
  browser->cache_thread;
  browser->file_thread;
  browser->io_thread;
  io_thread[style=filled];
  cache_thread[style=filled];
  ui_thread->thread[label=inherit];
  ui_thread->messageloop[style=dotted];
  db_thread->messageloop[style=dotted];
  webkit_thread->messageloop[style=dotted];
  cache_thread->messageloop[style=dotted];
  file_thread->messageloop[style=dotted];
  io_thread->messageloop[style=dotted];
}

它给出了这样的图形 output graph

但是,这不是我想要的。 我想要下面的图片。 “thread”垂直位于“ui_thread”之上。 enter image description here 您可能认为使用“rankdir = same”与“thread”和“ui_thread”可以轻松解决。 我确实已经尝试过了。但我失败了。 “thread”总是低于“ui_thread”。

感谢,

1 个答案:

答案 0 :(得分:3)

不幸的是,图形方向只能指定一次,整个图形保持在该方向。在这种情况下,通常可以使用constraint=false和不可见边缘的组合来获得所需的效果,以强制进行某些排序。

此代码将生成您的第二张图片:

digraph G {
  rankdir=LR;
  size="7,5";
  browser->thread[style=invis];
  browser->ui_thread;
  browser->db_thread;
  browser->webkit_thread;
  browser->cache_thread;
  browser->file_thread;
  browser->io_thread;  
  io_thread[style=filled];
  cache_thread[style=filled];
  ui_thread->thread[label=inherit constraint=false]; 
  ui_thread->messageloop[style=dotted];
  db_thread->messageloop[style=dotted];
  webkit_thread->messageloop[style=dotted];
  cache_thread->messageloop[style=dotted];
  file_thread->messageloop[style=dotted];
  io_thread->messageloop[style=dotted];
}