gpt4 book ai didi

python - networkx:将网络绘制为分隔两种类型的节点

转载 作者:行者123 更新时间:2023-11-30 22:42:11 25 4
gpt4 key购买 nike

我正在尝试使用 python 的 networkx 绘制一个网络。

我有两种类型的节点,这些类型的节点应该分开放置。如何分别放置不同类型的节点?

作为示例,请参阅以下节点。

enter image description here

我希望将红色节点(狗、牛、猫)与蓝色节点(汽车、笔、纸、杯子)分开,如下图所示。

enter image description here

enter image description here

所以,我的问题是networkx如何绘制这种将节点组分开的网络,如上图

作为引用,我粘贴了绘制第一张图像的代码。

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
target_word_list = ["dog", "cow", "cat"] # represented by red nodes
attribute_word_list = ["car", "pen","paper", "cup"] # represented by blue nodes
word_list = target_word_list + attribute_word_list

for i in range(0, len(word_list)):
G.add_node(i)

pos=nx.spring_layout(G) # positions for all nodes
# draw nodes
nx.draw_networkx_nodes(G,pos,
nodelist=range(0, len(target_word_list)),
node_color='r',
node_size=50, alpha=0.8)
nx.draw_networkx_nodes(G,pos,
nodelist=range(len(target_word_list), len(word_list)),
node_color='b',
node_size=50, alpha=0.8)
labels = {}
for idx, target_word in enumerate(target_word_list):
labels[idx] = target_word
for idx, attribute_word in enumerate(attribute_word_list):
labels[len(target_word_list)+idx] = attribute_word
nx.draw_networkx_labels(G,pos,labels,font_size=14)

plt.axis('off')

最佳答案

您可以手动向上或向下移动一组中节点的 y 坐标。因此,如果您的节点坐标为 pos:

for i in range(0, len(word_list)):
if word_list[i] in attribute_word_list:
pos[i][1] += 4

这会将第二组中的节点向上移动。

你的整个代码:

import networkx as nx
import matplotlib.pyplot as plt

G = nx.Graph()
target_word_list = ["dog", "cow", "cat"] # represented by red nodes
attribute_word_list = ["car", "pen","paper", "cup"] # represented by blue nodes
word_list = target_word_list + attribute_word_list

for i in range(0, len(word_list)):
G.add_node(i)

pos=nx.spring_layout(G) # positions for all nodes

# if node is in second group, move it up
for i in range(0, len(word_list)):
if word_list[i] in attribute_word_list:
pos[i][1] += 4

# draw nodes
nx.draw_networkx_nodes(G,pos,
nodelist=range(0, len(target_word_list)),
node_color='r',
node_size=50, alpha=0.8)
nx.draw_networkx_nodes(G,pos,
nodelist=range(len(target_word_list), len(word_list)),
node_color='b',
node_size=50, alpha=0.8)
labels = {}
for idx, target_word in enumerate(target_word_list):
labels[idx] = target_word
for idx, attribute_word in enumerate(attribute_word_list):
labels[len(target_word_list)+idx] = attribute_word
nx.draw_networkx_labels(G,pos,labels,font_size=14)

plt.axis('off')
plt.show()

输出:

enter image description here

关于python - networkx:将网络绘制为分隔两种类型的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42239622/

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