使用 networkX 和 matplotlib 绘制一个巨大的图形

Posted

技术标签:

【中文标题】使用 networkX 和 matplotlib 绘制一个巨大的图形【英文标题】:Drawing a huge graph with networkX and matplotlib 【发布时间】:2012-03-13 05:18:28 【问题描述】:

我正在使用 networkX 和 matplotlib 绘制一个包含大约 5K 节点的图形。 matplotlib 的 GTK 窗口具有缩放和可视化图形的工具。 有什么办法,我可以保存一个放大的版本以便以后进行适当的可视化?

import matplotlib.pyplot as plt
import networkx as nx

pos=nx.spring_layout(G)   #G is my graph

nx.draw(G,pos,node_color='#A0CBE2',edge_color='#BB0000',width=2,edge_cmap=plt.cm.Blues,with_labels=True)
#plt.show()
plt.savefig("graph.png", dpi=500, facecolor='w', edgecolor='w',orientation='portrait', papertype=None, format=None,transparent=False, bbox_inches=None, pad_inches=0.1) 

【问题讨论】:

应该还有一个保存按钮......或者至少我确定其中一个前端有这个(也许是Qt的?)...... 是的,有一个保存按钮。但是,一旦您放大图表的一部分并保存它,它只会保存当前的查看区域。我想要查看整个图表。 你不能直接上dpi 以便在保存的图像中显示更多细节吗? @JonathonReinhart 看起来不错。这种进口往往是假设的;) @tcaswell 我想,我只是没有经常使用这些库中的任何一个,并且想确定一下。顺便说一句,networkx...哇!无论如何,我现在将删除我毫无意义的评论。 【参考方案1】:

您有两个简单的选择:

提高 DPI

plt.savefig("graph.png", dpi=1000)

(更大的图像文件大小)

另存为 PDF

plt.savefig("graph.pdf")

这是最好的选择,因为最终的图形没有被光栅化。理论上,您应该能够无限放大。

【讨论】:

@NiharSarangi 我觉得问题“保存放大版本以便以后进行适当的可视化”已得到解答。如果图像很乱,并且您想自定义networkx,这可能会成为不同问题的素材。尝试在你的绘图命令中关闭标签 with_labels=True -> with_labels=False 以清理它。【参考方案2】:

虽然不在 GTK 中,但您可能想查看NetworkX Viewer。

【讨论】:

【参考方案3】:

你可能想看看这个:

plt.savefig("name.svg")

质量很棒。虽然 dpi 选项仍然有效。

【讨论】:

以上是关于使用 networkX 和 matplotlib 绘制一个巨大的图形的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 和 networkx 进行大图可视化

Networkx 和 Matplotlib:如何访问节点属性并将它们显示为注释

节点的 Networkx 和 matplotlib 颜色图;不同网络的相同地图

将 NetworkX 图嵌入 PyQT 小部件

如何使用 `networkx` 中的 `pos` 参数创建流程图样式的图表? (Python 3)

[Python] networkx入门 转