首页 > 解决方案 > 使用graphviz在像kcachegrind这样的标签中创建百分比条

问题描述

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

调用图

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

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

标签: graphvizdot

解决方案


您可以在单元格的属性中使用colorListbgcolor来模仿进度条。

例子:

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

结果:

结果


推荐阅读