使用graphviz在类似kcachegrind的标签中创建百分比栏

使用graphviz在类似kcachegrind的标签中创建百分比栏,graphviz,dot,Graphviz,Dot,我正在尝试使用graphviz创建一个类似于kcachegrind的调用图。参见,例如 我想我可以用一个表格创建一个百分比栏,表格中的一行使用两个单元格,设置它们的大小和背景颜色。这类操作有效,但默认情况下,它会使条与最宽的列(函数标签)一样宽。如果我添加fixedsize=“TRUE”单元格将获得预期的宽度,但现在在单元格之间插入了空格,使总宽度仍然等于表总宽度。我也尝试了嵌套表,但似乎得到了相同的结果单元格间距(0)似乎只影响垂直间距 我查看了kcachegrind的来源。他们似乎只保留一

我正在尝试使用graphviz创建一个类似于kcachegrind的调用图。参见,例如

我想我可以用一个表格创建一个百分比栏,表格中的一行使用两个单元格,设置它们的大小和背景颜色。这类操作有效,但默认情况下,它会使条与最宽的列(函数标签)一样宽。如果我添加
fixedsize=“TRUE”
单元格将获得预期的宽度,但现在在单元格之间插入了空格,使总宽度仍然等于表总宽度。我也尝试了嵌套表,但似乎得到了相同的结果<代码>单元格间距(0)似乎只影响垂直间距

我查看了kcachegrind的来源。他们似乎只保留一条线,自己做百分比栏(解析点布局信息并直接在画布上绘制节点)。这表明在graphviz中可能不可能做到这一点。我可以选择的相关解决方案是后期处理 SVG,但看起来很难看…

您可以在单元格的
bgcolor
属性中使用它来模拟进度条

例如:

digraph {
    example1 [
        shape=plain
        label=<
            <table cellborder="0" cellspacing="5">
                <tr><td colspan="2">Title</td></tr>
                <tr><td border="1" width="50" bgcolor="#6da8ce;0.25:white"></td><td color="white">25%</td></tr>
            </table>
        >
    ]

    example2 [
        shape=plain
        label=<
            <table cellborder="0" cellspacing="5">
                <tr><td colspan="2">Title</td></tr>
                <tr><td border="1" width="50" bgcolor="#6da8ce;0.71:white"></td><td color="white">71%</td></tr>
            </table>
        >
    ]
}
有向图{
例1[
形状=普通
标签=<
标题
25%
>
]
例2[
形状=普通
标签=<
标题
71%
>
]
}
结果:


工作完美!必须添加
fixedsize=“TRUE”
以避免条形图与标签大小相同,但这是细节。另外请注意,如果条形值正好为0,则会得到一个渐变,因此只需指定
white