graphviz - 在绘制图形之前删除具有 0 个边的节点(点,graphviz)

标签 graphviz dot

在使用 dot -Tpng mcve.gv -o mcve.png 绘图之前,如何从图形中删除没有边的节点?

当前结果:
enter image description here
想要的结果:
enter image description here

阅读文档并在网上搜索我发现以下内容 answer乍一看似乎很好。 (删除所有边为 0 的节点)

vpr -c 'N[$.degree==0]{delete($);}' mvce.gv | dot ...

不幸的是,此命令会出现以下错误:
gvpr: "<command line>", line 2: delete($)<<< 
 -- cannot convert node_t to graph_t

从我读到的内容来看,这似乎很奇怪 N[predicate]{action}应该只执行 action在节点上。

我的图表的一个最小示例:
graph main_graph {
  node1;
  node2;
  node3;
  node4; // not used

  subgraph graph1 {
    edge [color=red,penwidth=2]
    node1 -- node2;
  }

  subgraph graph2 {
    edge [color="blue",penwidth=2]
    node2 -- node3;
    node1 -- node3;
  }
}

最佳答案

gvpr doc表示 delete实际上有 2 个参数 - 首先是要从中删除的图形,然后是要删除的对象。

您只是传递一个节点,这似乎可以解释转换错误。

由于没有对可用图形的引用,因此传递 NULLroot (参见同一个文档)可以作为参数传递:

gvpr -c "N[$.degree==0]{delete(root, $)}" mygraph.gv
gvpr -c "N[$.degree==0]{delete(NULL, $)}" mygraph.gv

将导致 int
graph main_graph {
    subgraph graph1 {
        edge [color=red,
            penwidth=2
        ];
        node1 -- node2       [color=red,
            penwidth=2];
    }
    subgraph graph2 {
        edge [color=blue,
            penwidth=2
        ];
        node1 -- node3       [color=blue,
            penwidth=2];
        node2 -- node3       [color=blue,
            penwidth=2];
    }
}

关于graphviz - 在绘制图形之前删除具有 0 个边的节点(点,graphviz),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43965713/

相关文章:

graphviz - 点中的星形图?

doxygen - 如何为点图添加顶部和底部标签?

尽管rankdir=LR,Graphviz 仍强制节点垂直堆叠

image - 用图像注释 DOT 图

php - linux 点实用程序(使用 xhprof)

graphviz - Graphviz 中的相同节点,不同颜色

python-3.x - Ubuntu graphviz 'sfdp' 不工作

python - 未找到 GraphViz 的可执行文件 - 为什么通过 pip 安装 graphViz 后没有安装可执行文件?

javascript - 使用 SVG 和 Javascript 的交互式有向图

graphviz - gvpack (graphviz) 不保留各个有向字母的标签