GraphViz边缘标签

时间:2009-05-06 17:15:41

标签: c graphviz data-visualization dot

我正在尝试使用graphviz绘制C头文件之间的依赖关系图。

基本上,我正在做的是记录所有出现的#include和条件(我的意思是#if条件)。如果一个文件包含另一个文件,它将成为图中的父亲,潜在条件是边缘标签。

我获得了一张非常大的图表。问题源于边缘标签总是水平的(你不能改变它)并且似乎总是左对齐(我已经尝试过labelloc和labeljust但它没有改变任何东西。“中心”的正确方法是什么一条边的标签。

为了避免这个问题,我尝试将条件渲染为节点。如果Ah在ANSI条件下包含Bh,则存在从Ah到ANSI然后从ANSI到Bh的链接。看起来没问题,但问题是如果Ch在相同条件下包含Dh,我会看到从Ah到ANSI的链接,一个从Ch到ANSI;一个从ANSI到B.h,一个从ANSI到D.h.问题是我不知道它是A.h还是C.h,包括B.h.有没有办法指定像遍历节点之类的东西(从A.h到B.h的链接,在ANSI下可能会利用透明度。)

2 个答案:

答案 0 :(得分:4)

labelloc和labeljust对于边缘来说毫无意义。请参阅here,它将“GC”分别表示为Graph,Cluster或“N”作为Node。

但是,您可以考虑使用标签为每个条件生成唯一节点。然后会有多个节点具有不同的“点ID”,但是相同的标签(条件的文本),因此很明显A.hC.h是否包含B.h。我想你会对结果感到满意,因为你已经说过它看起来不错。

祝你好运!

答案 1 :(得分:2)

我使用具有相同标签的唯一节点取得了很大成功,具体取决于我所说明的内容。根据需要将边缘标签的幻觉置于中心的一种有趣方法是使用shape = plaintext的节点。

您也可以使用它来提供连接点 - 有许多边缘进出明文节点,如下所示:

digraph joins {

node [shape=box weight=bold fontsize=18 color=black fontcolor=black]
edge [color=black fontcolor=black ]
graph[size="6,4",ratio=fill,center=1]

tblXXMaster[shape=record label="tblXXMaster | <f0>intMasterXXNumber | <f1>boolXXsPrinting"] 
set[shape=plaintext label="sets flag"]
setandclear[shape=plaintext label="sets next value\nand clears flag"]
setandclear->tblXXMaster:f0
setandclear->tblXXMaster:f1

set->tblXXMaster:f1
use[shape=plaintext label="uses current\nnumber"]
tblXXMaster:f0->use
XX[shape=plaintext label="XXs\nflag"]
tblXXMaster:f1->XX

"wndManualReceipt\n.procOne"->setandclear
"wndManualDebit\n.procOne"->setandclear
"wndApproveXXs\n.procOne\n.d005TempSetBitToZero"->setandclear
"wndPrintXXs\n.procZero\n.procOne"->setandclear
"wndUnapproveXXs\n.procZero\n.procOne"->setandclear
"wndWriteXXForMultipleInvoices\n.procOne\n.d005TempSetBitToZero"->setandclear
"wndWriteManualXX\n.procOne\n.procZero"->setandclear

"wndConfirmXXPrint\n.applyLock"->set
"wndConfirmMultiInvoiceXXPrint\n.applyLock"->set

use->"wndConfirmXXPrint\n.nextNumber"
use->"wndConfirmManualXXPrint\n.nextNumber"
use->"wndConfirmMultiInvoiceXXPrint\n.nextNumber"
XX->"wndConfirmManualXXPrint\n.doPrint"
XX->"wndConfirmMultiInvoiceXXPrint\n.doPrint"
}