过去,我使用Graphviz创建图形绘图。

但是不幸的是,对于大图,Graphviz确实很烂:
它会叠加不同的文本,使它们不可读。
它没有可重复使用的样式(如CSS),并且您需要在节点和边缘重复,重复,重复相同的个性化设置。
如果用户只想交换两个节点的位置。为此,经常需要对源文件进行大量修改,可能会在此过程中拧紧图形的无关部分。
为了在图形的一个孤立位置Graphviz中进行小的更改,这很容易迫使其他地方进行重大的重大更改,常常使试图说服它的工作变得无效。
它浪费了图表中的大量空间,同时又使某些地方变得非常拥挤。
有时,有些边缘形成了非常弯曲的路径,将源节点与目标节点连接起来,具有奇怪的无用曲线和大量重叠的横向延伸边缘。
它具有雪崩效应。在图形中的某个地方进行细微的修改可能会扰乱Graphviz的启发式方法,从而导致图形完全不同。
很多错误... :


定义节点是什么,可能要应用样式。
说什么是边,可能要应用样式。

然后程序给出:


交叉图最少的图形。
对齐的节点很好。想要:


由于该工具太愚蠢而无法看到它可以交换两个特定的节点以删除交叉点,因此在输入上添加了很多技巧。
手动需要定位边缘和节点。
获取雪崩效果。

那么,什么可以替代Graphviz?我真的希望它是一个免费的软件。

注意:只要我可以使用图形描述(无论该描述的语言是什么)。因此,绝对没有必要使用点语或类似语言(实际上,我很乐意完全丢​​弃我的点文件,因为那里的黑客数量远远超过实际的图形描述)。 br />

评论

见乡亲们,这是您在这里提出的问题(而我将忽略graphviz确实很烂,因为您很好地解释了为什么它“烂”了)。

一位同事说d3.js正确地完成了大部分定位。显然,它还有其他一些不太好的副作用,例如基于浏览器和动态的(即并非每个人都得到相同的输出),因此它可能不是您想要的。
@mirabilos相信我,我已经尝试了很多选择(自2011年起)。如果图形没有循环,它将退化为某种树,并且易于绘制。但是,我的图实际上有很多周期,大约有200个节点。为了用graphviz处理这个问题,我不得不将该图分成12个独立的子图,并重复出现在多个图中的节点。此外,我需要添加许多不可见的节点,边缘和群集。在我的图中,簇几乎没有语义含义,它们只是试图强迫graphviz正确完成工作的黑客。

计算科学SE在这里有相同的问题:scicomp.stackexchange.com/questions/3315/…。除GraphViz之外,还有几个可用选项:免费* JavaScript InfoVis工具包*用于R统计系统的igraph包* zGrViewer *非大型图形库* GraphInsight
@塞巴斯蒂安好吧,我已经离开了出现问题的公司。但我可能会将数据保存在某个备份文件中的某个位置。

#1 楼

对不起,很抱歉。 Graphviz在许多方面可能会更好,但是在这一点上前景并不理想,因为AT&T对这项工作的支持程度不如过去,而且有些作者(如我)已经离开寻找其他工作。我们正在寻找想要接手的人,所以让我们知道。

yFiles也给我们留下了深刻的印象。

还尝试Tom Sawyer Software;他们拥有大量的工程人才,并且在高级布局方法和交互式工具方面做了很多工作。 (您可能需要花费$$的费用,因为免费试用似乎已经停止了。)因此,尚不清楚建议什么。 (这些选项不是默认选项,因为在数据分析(例如生物信息学)中,直接进行MDS嵌入可以更准确地呈现底层网络中的距离。)

如果“大”表示数千个节点,可能有成千上万个-Goverlap = false,再次使用neato -Goverlap=false而不是-Gmodel=subset。 (子距离模型在sfdp中不可用,因为尚不清楚在分层求解器中合并边时如何处理可变边长。)您可以在此处看到1054节点图的一个好例子

对于组件断开连接时的“浪费空间问题”,另请参阅pack和packmode属性。解决此类问题的方法并不明显(基本上,您试图以最佳方式打包不规则形状,附加约束,并且有时会以人们认为“大”的大小进行缩放,因此需要二次方程式算法。)对于连通图,请尝试-重叠选项。

这些是建议。至于借口和解释...

有人所谓的“雪崩效应”也称为关于输入图形中(较小)变化的布局不稳定性。这是几乎所有批处理图布局程序和约束求解器的属性。因此,您应该寻找诸如D3弹簧嵌入器布局之类的交互式工具,而Tim Dwyer在Microsoft时就做了很多出色的工作,因此也许有一天他们的Graph Layout工具箱(AGL)将采用他的交互式约束方法。只是观察,大多数研究人员和程序员都没有尝试同时攻击规模,交互性和美观性(选择以上两项中的任意一项...)第一,我们只是没有时间/精力来解决它,因为大多数图形都是自动生成的,因此您可以在某些预处理工具或脚本中应用样式。还必须考虑的是,图不仅是静态的解析树,而且在读取图之后,可以更改其样式表或已应用样式的对象的属性,然后必须将图写出正确地以尽可能保留原始结构的方式。不是不可克服的,但是这些是必须仔细考虑的细节。错误可以在www.graphviz.org的Bug和问题跟踪下进行报告。

曲线平滑-难题。请注意,其他一些工具的许多外观很酷的布局都使用弯曲的边缘,但它们只会覆盖所有其他方式。我认为我们也将此功能添加到了graphviz中。另外,我认为有CHI或INFOVIS论文显示出这样的弯曲边缘实际上比直线更难正确读取。

十字路口-可能会进行一些局部优化。不确定正在使用什么工具。容易指出一些具体的示例,其中布局可能会更好,但很难发明出一种有效的解决方案,即“最小交叉点数”通常不会使总体情况恶化。 m与Graphviz直接关联。

评论


我投票了。 Stephen North是公认的图形可视化专家,鉴于OP对Graphviz的抨击,将其见解作为答案是很宝贵的。 (尽管我确实了解OP的挫败感,但是绘制图形是一个困难的问题)

–弗朗克·德农库尔
2014年3月14日0:45在

#2 楼

我的软件推荐为“ yEd”-啤酒通用图形绘制应用程序中的免费软件,它非常努力地解决您遇到的问题。据我所知,该软件使用了布局算法的最佳免费使用的实现。 >
您要解决的问题是一个非常棘手的问题(尤其是在计算上很困难),因此不太可能找到能够很好地解决所有问题的工具。有许多免费解决方案(GraphViz可能是最好的解决方案之一),并且有许多商业竞争对手。对于商业的yFiles图形库,有一个免费的(如啤酒中的)跨平台应用程序可以尝试。它可以从几种不同的格式导入数据,将样式映射应用于您的数据,并提供了大量的不同布局算法。它称为yEd,可以从此处在Web版本中进行任何安装而无需安装即可运行。桌面版本可以直接从浏览器中或作为Java“ webstart”应用程序启动,也可以在安装了适用于Windows,Linux和Mac的独立程序之一之后启动。与非常大的图形(成千上万的元素)一起使用,因为它们将执行很长时间或需要过多的内存,但是大多数情况下,至少有一种布局样式应非常适合您的数据。如果需要根据API进行编程,则需要许可基础库(可用于Java,.net,Javascript),这符合您的“免费”要求,但这将使您对布局有更多的控制权。 br />
免责声明:我为创建此(免费)产品的公司工作,但是在Stack Exchange上,我不代表我的雇主。自1990年代后期以来,我将大部分学术和专业时间都花在了绘图软件上,我相信我对市场和可用软件(免费和商用)都有非常深入的了解。可能还有其他工具可供使用,我希望这个网站可以提出很多不错的选择-我当然不会拒绝。

评论


+1。 OP请求是不可能的(对于大图-> NP-hard,祝您好运,程序给出的图的交叉次数尽可能少。)这个答案是专家素质。

–弗朗克·德农库尔
14 Mar 14 '14在0:33



我也赞成。如果曾经有您希望专家介入的地方,那就是棘手的问题,在获得软件时,很高兴听到专家的意见。

–伊拉克·巴克斯特
2014年5月5日在6:47

要将GraphViz(.dot)转换为yEd可以读取的格式,请使用dottoxml。

–戴夫·贾维斯(Dave Jarvis)
2015年12月17日的1:28

作为yEd(不隶属于该公司)的独立用户,我确认yEd是现有的最佳免费软件(并且我已经尝试了许多)

– Alexis
18年10月10日在10:09

#3 楼

要非常具体地回答问题的要求,因为其他两个答案在扩展范围方面做得非常出色:

您的要求是不可能的。您需要一个程序来给出“具有尽可能少的交叉数的图形。”,并且您特别要求该程序适用于大型图形。

但是,确定图的交叉数是一个NP难题(Garey and Johnson在1983年证明它是NP完全的)。无法保证在合理的时间内找到尽可能少的交叉次数的图形,从而使程序无用。

评论


可能会有“相当少”的穿越次数,而不是严格的全球最小值。

– Vi。
15年3月18日在12:28

#4 楼

当然,这将被视为“基于GraphViz的解决方案”,但是如果您使用GraphViz,则可能需要查看Gephi。处理大型图形时,它的功能要强大得多。

#5 楼

PlantUML是一种开源工具,允许用户从纯文本语言创建UML图。 PlantUML的语言是专用语言的示例。它使用Graphviz软件布置其图表。它已用于允许盲人学生使用UML。PlantUML还帮助盲人软件工程师设计和阅读UML图。



评论


抱歉,但这根本没有帮助。作者明确要求提供一种比GraphViz更好地解决问题的软件。因此,这显然排除了基于GraphViz的解决方案。而且,UML图当然也不是“大图”的典型应用。您是要回答其他问题吗?

–塞巴斯蒂安
18年11月20日在8:02