使用 graphviz 在 kcachegrind 等标签中创建百分比条

Create percentage bar in label like kcachegrind using graphviz

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

我想我可以使用 table 创建百分比栏,一行使用两个单元格,设置它们的大小和背景颜色。这种工作方式,除了默认情况下它会使条形图与最宽的列(函数标签)一样宽。如果我添加 fixedsize="TRUE" 单元格获得预期的宽度,但现在 space 插入单元格之间以使总宽度仍然等于总 table 宽度。我也试过嵌套 tables,但这似乎给出了相同的结果。 cellspacing(0) 似乎只影响垂直间距。

我查看了 kcachegrind 源代码。他们似乎只是保留一条线并自己做百分比条(解析点布局信息并直接在 canvas 上绘制节点)。这表明它可能无法在 graphviz 中执行此操作。我可以选择的相关解决方案是 post-process SVG,但这看起来很丑......

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

示例:

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>
        >
    ]
}

结果: