在询问之前,我试图搜索我的问题的答案,但我找不到。 我的问题是关于改变点图中的边缘方向。 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]; }
它给出了这样的图形
但是,这不是我想要的。 我想要下面的图片。 “thread”垂直位于“ui_thread”之上。 您可能认为使用“rankdir = same”与“thread”和“ui_thread”可以轻松解决。 我确实已经尝试过了。但我失败了。 “thread”总是低于“ui_thread”。
感谢,
答案 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];
}