gpt4 book ai didi

python - Networkx 传播节点和短缺标签

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

我有一个网络二分图。这是代码:

    G = nx.Graph()
G.add_nodes_from(USsNames, bipartite=0) # Add the node attribute "bipartite"
G.add_nodes_from(TCsNames, bipartite=1)
G.add_weighted_edges_from(compoundArr)

labeldict = {}


# Separate by group
pos = {}

# Update position for node from each group
pos.update({node: [1, index] for index, node in enumerate(USsNames)})
pos.update({node: [2, index] for index, node in enumerate(TCsNames)})

nx.draw(G, pos, node_size=10,with_labels=False)
for p in pos: # raise text positions
pos[p][1] += 0.12

# create the dictionary with the formatted labels
edge_labels = {i[0:2]:'{0:.2f}'.format(i[2]['weight']) for i in G.edges(data=True)}

# add the custom egde labels
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels,font_size=8)
nx.draw_networkx_labels(G, pos,font_size=8)
plt.show()

输出: enter image description here

我需要展开左侧节点以便它们向上展开,并缩短右侧节点标签(比方说前四个字符)。

我试图找到解决方案,但没有成功。谢谢。

最佳答案

我根据生成的示例数据重建了您的案例。

首先我们有这张图。

enter image description here

左数组的大小远小于右数组的大小,所以左数组是不按比例绘制的。要正确绘制它,您应该修改位置更新函数:

pos.update({node: [1, index] for index, node in enumerate(USsNames)})

我们知道 TCsNamesUSsNames 大,所以我们可以将每个 USsNames 节点的 Y 位置乘以它们的比率:

pos.update({node: [1, index*(len(TCsNames)/len(USsNames))] for index, node in enumerate(USsNames)})

现在我们有这张图:

enter image description here

要裁剪节点标签,您应该使用 labels 参数修改您的 draw_networkx_labels:

nx.draw_networkx_labels(G, pos, labels=node_labels, font_size=8)

node_labels 等于:

node_labels = {i: i[:5] for i in G.nodes}(5 是所需的节点标签长度)。

最后我们有了您需要的图表:

enter image description here

关于python - Networkx 传播节点和短缺标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52982974/

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