过滤掉有向Graphviz图中不相关的节点?

问题描述 投票:0回答:1

我使用 Graphviz 和

dot
生成了一个仅包含单向边的有向图。 我想知道一种将节点和边减少到仅指定节点所需的节点和边的方法。 例如,给定这个点文件:

A->B
B->C
C->D

我想要一个专注于节点 B 的 shell 命令,这样结果输出如下所示:

B->C
C->D

作为参考,我将其用作将 json 中的应用程序依赖项列表转换为点的项目的一部分,并且希望在生成图表时能够专注于单个应用程序的依赖项。

graphviz dot
1个回答
0
投票
/* based on "cliptree" - part of Graphviz source  */
/* Construct subgraph reachable from node ARGV[0] by forward edges */
/**/
/*  command line: gvpr -aYourNodeName -cf subgraph.gvpr yourFile.gv |dot -Tpng ...  */
/*  escape any whitespace characters in the node name with a backslash  */

BEGIN {
  int edgeDel[], nodeDel[];
  obj_t obj;
}
// mark all nodes & edges for deletion
N{nodeDel[$]=0;}
E{edgeDel[$]=0;}
// traverse again, starting at the desired node
BEG_G{
  node_t r = node($,ARGV[0]);
  //printf(2,"arg: %s\n", ARGV[0]);
  $tvroot = r;
  $tvtype = TV_fwd;
}
N{
  unset(nodeDel,$);
  $tvroot=NULL;
}
E{
  unset(edgeDel,$);
}
// delete all edges & nodes not visited by the 2nd travers
END_G{
  for (edgeDel[obj]) {
    delete($G, obj);
  }
  for (nodeDel[obj]) {
    delete($G, obj);
  }
}

命令行:

gvpr -aYourNodeName -cf subgraph.gvpr yourFile.gv |dot -Tpng ...
© www.soinside.com 2019 - 2024. All rights reserved.