【问题标题】:Remove nodes with 0 edges before drawing the graph (dot, graphviz)在绘制图形之前删除具有 0 个边的节点(点,graphviz)
【发布时间】:2017-05-15 05:50:33
【问题描述】:

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

当前结果: 想要的结果:

阅读文档并搜索网络,我发现以下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;
  }
}

【问题讨论】:

    标签: graphviz dot


    【解决方案1】:

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

    【讨论】:

    • 谢谢,我一定是错过了浏览文档。
    • 我没看懂,有没有工具可以删除没有内置边的节点?
    猜你喜欢
    • 2012-10-03
    • 1970-01-01
    • 2018-07-24
    • 2017-09-06
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2012-05-09
    相关资源
    最近更新 更多