【问题标题】:How can I modify the networkx plot distribution and visualization?如何修改 networkx 绘图分布和可视化?
【发布时间】:2016-04-20 17:16:50
【问题描述】:

我实现了一个 Networkx 图来分析我的数据,但因为它在公司(链接中的第一列数据)和代理(链接中的第二列数据)之间有巨大的组合,所以图不清楚。

如何修改绘图以减少节点的重叠?

数据: https://www.dropbox.com/s/vc7ivgbrbluv6ed/data_to_plot.txt?dl=0

我的代码:

import networkx as nx
import matplotlib as plt
import pandas as pd
import os
import pylab

# load the data    
network_to_plot = pd.read_csv('data_to_plot.txt',sep=" ", header = None)

# formatting the data
agents_vector = [tuple(x) for x in network_to_plot.to_records(index=False)]

# start the graph
G = nx.DiGraph()

G.add_edges_from(agents_vector)

pos=nx.spring_layout(G)
nx.draw(G,pos,edge_cmap=plt.cm.Reds)
pylab.savefig("network_based_on_firms.png")

结果:

【问题讨论】:

标签: python plot network-programming networkx


【解决方案1】:

图中节点的位置由函数spring_layout 确定,请参阅文档链接。

您可以从增加用于计算最佳位置的迭代次数开始。我认为您也将从设置低于默认值 (1/sqrt(nodes)) 的 k 中受益。

如果失败,您可以查看additional networkx layout calculators

【讨论】:

  • 我把布局从“spring_layout”修改为“random_layout”,但是图还是一样的。
  • 你是不是把代码改成了:pos=nx.random_layout(G),重现剧情?
  • 是的。我更改为“pos = nx.random_layout(G)”,但我可以更改问题。 (附上链接)。有一些功能可以“爆炸”节点并使情节更好吗? [链接] (dropbox.com/s/jzdq6rh9uryfars/network_based_on_firms.png?dl=0)
  • 好的,所以图表并不完全相同,只是仍然不是您想要的。 random_layout() 从字面上随机放置节点,您不太可能以这种方式找到合适的布局。尝试其他更合理的布局函数,例如spectral_layout()。
【解决方案2】:

两种可能的途径。
一种是使用更好的布局函数,可能是 shell_layout() 或 circle_layout()。
另一个是了解布局功能产生的结构,并利用您对数据的理解来产生更明智的可视化。 这些函数生成一个字典,其键值是长度为 2 的列表的节点。第一个条目指定节点的 x 位置,第二个条目指定 y。
举个例子,一个办公室之间的网络连接图。

pos=nx.spring_layout(G)
print pos

可能会产生类似的东西

{'A': [1, 12], 'C': [5, 8], 'B': [4, 11], 'E': [8, 3], 'D': [8, 7], 'F': [6, 1]}

但是,我知道,由于我的数据代表 citites,因此在代表其物理位置的位置显示节点是有意义的,因此我构建了自己的字典。

pos = {}
for node in G.nodes():
    pos[node] = [G.node[node]["x"], G.node[node]["y"]]

您似乎对自己的数据掌握得很好。使用它来发挥您的优势。在您的具体情况下,似乎有两个主要类别,代理和公司。也许将您的图形可视化分为 3 列:“代理”区域、“边缘区域”和“固定”区域。遍历节点并分配 X 和 Y 值,以锯齿形向下适当的区域(边缘区域中没有节点,允许连接清晰)。对于许多节点,数据仍然可能非常模糊。也许根据节点的连接数给节点额外的 Y 填充。 摆弄比例和其他模式,你应该能够产生一些值得一看的东西。将拥有最少代理商的公司置于底部,然后将与其连接的所有代理商放置在代理商区域的底部。然后移动到下一个公司,放置所有连接到它但尚未放置的代理,依此类推。将每个公司置于它所映射的代理区域的中值 y 处。选择是无穷无尽的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 2013-06-27
    • 1970-01-01
    • 1970-01-01
    • 2015-02-27
    相关资源
    最近更新 更多