常见问题

我尝试安装igraph但遇到了错误!我该怎么办?

首先,查看我们的安装说明,包括故障排除部分。如果这不能解决您的问题,请通过igraph论坛联系我们。我们将尽力帮助您!

我刚安装了igraph。我现在该做什么?

快速浏览一下快速开始!然后你可以通过我们的示例库查看更多示例,阅读关于图生成分析可视化的详细说明,并查看完整的API文档

我以为igraph是一个R包,这是同一个包吗?

igraph 是一个用C编写的软件库,提供了多种编程语言的接口,如R、Python和Mathematica。许多函数在不同语言中会有相似的名称和功能,但匹配并不完美,因此你偶尔会发现某些函数在一种语言中支持而在另一种语言中不支持。请参阅下面的FAQ以了解如何请求新功能。

我想使用igraph但不懂Python,该怎么办?

igraph 可以从多种编程语言中使用,例如 C、R、Python 和 Mathematica。虽然确切的函数名称略有不同,但大多数功能是共享的,因此如果你能编写其中任何一种语言的代码,你就可以使用 igraph:只需参考我们主页上相应语言的安装说明。

如果你完全不熟悉编程,或者如果你不了解任何Python但仍然想使用igraph的Python接口,你应该首先学习Python。网上有很多资源,包括在线课程、视频、教程等。igraph并没有使用很多高级的Python特定技巧,所以一旦你能使用像pandasmatplotlib这样的标准模块,igraph应该很容易上手。

我想要一个用于操作/算法X的函数,你能添加吗?

我们正在不断扩展igraph以包含新功能,来自我们社区的请求是指导这些工作的最佳方式。当然,我们只是少数人,因此无法保证每个晦涩的社区检测算法都会被包含在包中。请在我们的论坛上开启一个新话题来描述您的请求。如果您的请求是调整现有函数或特定代码片段,您可以直接在GitHub问题中开启一个(确保类似的问题还不存在!- 如果存在,请在那里评论。)

igraph 和类似包(networkx, graph-tool)之间有什么区别?

所有这些包都专注于图/网络分析。

警告

以下差异和相似之处在撰写时(2022年1月)被认为是正确的。如果您发现不正确或过时的信息,请打开一个Github issue,我们将更新它。

差异:

  • igraph 支持 多种编程语言(例如 C、Python、R、Mathematica)。networkxgraph-tool 仅支持 Python。

  • igraph的核心库是用C语言编写的,这使得它通常比networkx更快。graph-tool是用高度模板化的C++编写的,因此它可以和igraph一样快,但支持的架构较少。编译graph-tool可能比igraph花费更长的时间(几小时对比大约一分钟)。

  • igraph 的顶点是按连续的数字ID排序的,从0开始,并且有一个可选的“顶点名称”。networkx 的节点是通过它们的名称定义的,并且没有排序。

  • 对于边也是如此,在igraph中使用整数ID进行排序,而在networkx中则不是这样。

  • igraph 可以使用 matplotlib 绘制图形,并且对 plotly 有实验性支持,因此可以生成动画、笔记本小部件和交互式图表(例如缩放、平移)。networkxmatplotlib 有很好的支持,但不支持 plotlygraph-tool 仅通过 Cairo 和 GTK+ 支持静态图像。

  • 在设计方面,igraph 在分析相对静态的网络时表现出色,而在处理非常动态的网络时可能会遇到困难,这些网络会不断增减顶点和边。随着我们改进 igraph 的核心 C 库,这种情况可能会在不久的将来发生变化。目前,networkx 可能更适合模拟这种高度动态的图。

相似之处:

  • 许多任务可以同样很好地通过igraphgraph-toolnetworkx完成。

  • 所有人都可以读写多种图形文件格式。

  • 所有人都可以可视化图表,各有优缺点。

注意

igraph 包含与 networkx 之间的转换函数,因此你可以使用 igraph 创建和操作网络,然后在需要时将其转换为 networkxgraph-tool。反之亦然,你可以在 networkxgraph-tool 中加载图,并在需要更高速度、特定算法、matplotlib 动画等时将其转换为 igraph 对象。你甚至可以使用 igraph 将图从 networkx 转换为 graph-tool,反之亦然!

我想为igraph做贡献,我应该从哪里开始?

感谢您的热情!igraph 是一个回馈开源社区或学习图论的绝佳机会。根据您在软件工程、编程、沟通或数据科学方面的技能,某些任务可能比其他任务更适合您。

如果你想立即开始编码,请查看 GitHub issues,看看是否 找到一个听起来足够简单并能激发你兴趣的问题,然后写一条 消息表示你有兴趣接手。我们会尽快回复并指导 你接下来的步骤。

C核心库也有各种“理论问题”。你可以通过研究图论文献或找到图问题的解决方案来为这些问题做出贡献,而无需任何编程知识。一旦理论障碍被克服,其他人就可以继续进行编码部分:真正的团队合作!

如果这些看起来都不可行,或者如果你有具体的想法,或者你仍然希望以纯编程以外的方式做出贡献,请在我们的论坛上联系我们,我们会想出一些主意。