我有以下脚本:
import pandas as pd
from igraph import *
df_p_c = pd.read_csv('data/edges.csv')
...
edges = list_edges
vertices = list(dict_case_to_number.keys())
g = Graph(edges=edges, directed=True)
plot(g, bbox=(6000, 6000))
我有2300个边缘和罕见的连接。这是我的情节: 下面是它的几个部分的放大图:
此图不可读,因为边之间的距离太小。怎样才能使边缘之间的距离更大?只有来自同一“族”的边的距离很小。在
有没有其他方法可以改善有很多边的地块? 我正在寻找任何方法来可视化父子关系,它可能是另一个python包。在
您可以签出networkx,这是一个非常好的图形库。Networkx有direct plotting support for matplotlib。在
它支持各种布局类型,例如spring layout, random layout, and a few more
您应该特别注意spring layout,它为您的用例提供了一些有趣的参数:
或者两者结合使用自定义布局:
也可以通过调整边权重来获得所需的结果:
我建议将networkx与bokeh结合使用,这是一个新的绘图库,可以创建基于web的html/js绘图。它直接支持networkx,并且有一些很好的特性,比如容易集成节点悬停工具。如果你的图表不是太大,性能是相当好的。(我绘制了大约20000个节点和几千条边的图)。在
将这两个库结合在一起,您只需为一个尝试构建优化布局的简单示例(来自文档)提供以下代码:
你似乎有很多小的,断开连接的组件。如果你想要一个信息丰富的图表,我认为你应该按大小对连接的组件进行排序和分组。此外,许多网络布局算法的基本假设是只有一个巨大的组件。因此,如果您想要合理的坐标,您通常需要分别计算每个组件的布局,然后根据彼此排列组件。我会用这种方式重新绘制图表:
我已经用
networkx
编写了这个图的代码,因为这是我选择的模块。但是,用igraph
函数代替networkx
函数是非常容易的。您需要替换的两个函数是networkx.connected_component_subgraphs
和您想用于component_layout_func
的任何函数。在编辑
如果您希望子图紧密排列,则需要安装矩形包装器(}:
^{pr2}$pip install rectangle-packer
),并用此版本替换{你知道你在寻找什么意思吗?或者你在探索?或者这是一个关于缩放问题的具体问题?在
到目前为止,你已经很好地看到了整体结构。你可能会考虑用一些常规来建立新的词汇表。例如,如果将一个小簇设置为一组点和边,则可以绘制直方图、相互重叠的簇的可视化效果、比较有无长节点的簇等等。在
相关问题 更多 >
编程相关推荐