【问题标题】:graphviz - compare graphic treesgraphviz - 比较图形树
【发布时间】:2013-05-28 06:38:03
【问题描述】:

我必须用 graphviz 做一份工作。我需要可视化几棵树的图形表示,但无论如何我必须比较两棵树以查看它们的差异:像这样,我有树 A 和树 B。创建它们的表示并比较它们后,我只需要查看没有共同点的节点。有人告诉我使用 EMF Compare,但不幸的是我不知道如何让这个插件接受 graphviz 的扩展。

面对这份工作有什么建议或任何其他可能的解决方案吗?

问候。

【问题讨论】:

  • 我不熟悉graphviz,所以我不知道这是否可以做到......快速谷歌搜索并没有为从graphviz导出到EMF(使用的底层建模技术通过 EMF 比较)。 EMF Compare 将允许您比较 EMF 模型:在比较它们之前,您需要一种方法将您的 graphviz 图形表示为这样的模型。
  • 是的,Kellindil,这是另一个问题。我找不到如何从 graphviz 创建模型并将其与 EMF 模型一起使用。这就是我决定写这个问题的原因,因为我对如何面对这个问题没有任何其他想法。不过还是谢谢。

标签: graphviz emf-compare


【解决方案1】:

给定两个.dot 文件,a1.dot

digraph g1 {
    A -> B -> D -> E
    A -> C -> E
    }

...和a2.dot:

digraph g2 {
    A -> B -> F -> E
    A -> C -> F
    }

...您可以找到它们之间不同的节点如下:

$ dot -Tplain a1.dot | sed -ne 's/^node \([^ ]\+\).*$/\1/p' | sort >a1.nodes
$ dot -Tplain a2.dot | sed -ne 's/^node \([^ ]\+\).*$/\1/p' | sort >a2.nodes
$ diff a1.nodes a2.nodes
4d3
< D
5a5
> F

我使用sed 将每个.dot 文件的节点名称列表从dotplain 输出中剥离出来,将节点按顺序排序,然后使用diff 查找差异.这种方法不会以图形方式呈现差异,但在最好的情况下这是一件棘手的事情。

【讨论】:

  • 非常感谢你的技巧,实际上可能对我正在做的事情有用。
  • 自从我回答了您的问题以来,我一直在考虑如何以图形方式显示差异,我认为应该可以通过显示合并图和阴影或以其他方式对每个节点进行不同的注释,具体取决于是否这两个图都很常见,仅在图 1 中或仅在图 2 中。如果您对这个图形解决方案感兴趣,我可以探索它。粗略地说,我首先采用我在回答中采用的方法,创建一个合并图,然后使用 diff 作为脚本的输入,该脚本为原始图之间不同的节点添加不同的节点属性。
  • @Simon 你有没有建立过你在这里谈到的视觉比较模式?
猜你喜欢
  • 2020-03-09
  • 1970-01-01
  • 2020-02-21
  • 1970-01-01
  • 1970-01-01
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多