gpt4 book ai didi

python - 绘制所有边都清晰可见的网络图

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:19 25 4
gpt4 key购买 nike

我有一个包含 30 个节点的图形网络数据(使用邻接矩阵)。该图目前看起来像这样:

enter image description here

每个集群有 15 个节点,每个节点都连接到同一集群内的其他节点。只有不同集群的两对节点相互连接。问题是我得到的图表都被压缩了,集群中的每条边都看不清楚。有没有一种方法可以清楚地显示集群中的每条边。主要是让图形变大,每个节点的边缘线清晰可见。

我使用 networkx lib 的以下命令绘制了此图。

G1=nx.from_numpy_matrix(W1)
nx.draw_networkx(G1)

其中 W1 是节点的邻接矩阵 (30x30)。

请指教。

编辑:

想要这样的东西,每个节点都清晰,边缘可见且不压缩。关键是我希望上部聚类点仅显示在该聚类附近,而下部聚类点也一样。但是在每个集群中,我希望节点稍微分开,以便每个边缘都清晰可见。

enter image description here

编辑2:

def adjacencyMatrix2():
for x in range(N):
if (x<15):
c=N/2
else:
c=N
for y in range(x+1,c):
W1[x][y]=W1[y][x]=1

# Connecting two other nodes separately.
W1[0][16]=W1[16][0]=1
W1[1][15]=W1[15][1]=1

adjacencyMatrix2()
G1=nx.from_numpy_matrix(W1)
graph_pos=nx.spring_layout(G1,k=0.50,iterations=50)
nx.draw_networkx(G1,graph_pos)

编辑3:

N=30
# Creating a matrix of zeros.
W=np.zeros((N,N))
# Mentioning the edges to start with. Thinking of a pair of 15 node cluster with two cluster connected by two pair of nodes.
edge=[[1,2],[1,3],[1,4],[1,5],[1,6],[1,7],[1,8],[1,9],[1,10],[1,11],[1,12],[1,13],[1,14],[1,15],
[16,17],[16,18],[16,19],[16,20],[16,21],[16,22],[16,23],[16,24],[16,25],[16,26],[16,27],[16,28],[16,29],[16,30],
[1,16],[2,17],[2,3],[5,6],[8,9],[9,4],[18,26],[17,22],[29,21],[17,28]]

# Function for creating adjacency matrix ,populating the zeros matrix with 1 and 0-signifying edges on a node.

def adjacencyMatrix():
"""This function creates an Adjacency Matrix from a edge set.
input-> set of edges to be connected
output-> Adjacency matrix (n,n)
"""
for first,second in edge:
W[first-1,second-1]=W[second-1][first-1]=1

# Creating the adjacency matrix by calling the function.
adjacencyMatrix()

我还看到每次运行代码时图表的布局都会发生变化。我不希望图形布局随着代码的每次运行而改变。目前它正在这样做。

最佳答案

您是否尝试过对其应用节点定位布局? networkx 库支持布局。看看here .我个人会推荐使用 Fruchterman-Reingold 的 Spring 布局。力导向算法。相关文档是 here .要在库中实际运行它,您可以尝试类似的操作:

pos=nx.spring_layout(G1)

其中 pos 是由每个节点键控的位置字典。

编辑:您可以使用上述文档中引用的参数控制布局的精确间距。具体来说,像这样:

nx.spring_layout(G,k=0.15,iterations=20)
# k controls the distance between the nodes and varies between 0 and 1
# iterations is the number of times simulated annealing is run
# default k =0.1 and iterations=50

请注意,我只是从 Stack 上的另一个问题中找到这些参数的解释,您可以在此处找到:How to increase node spacing for networkx.spring_layout .

如果这有帮助,请告诉我。

关于python - 绘制所有边都清晰可见的网络图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29136485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com