Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Networkx扩展节点并缩短标签_Python_Python 3.x_Networkx_Graph Theory - Fatal编程技术网

Python Networkx扩展节点并缩短标签

Python Networkx扩展节点并缩短标签,python,python-3.x,networkx,graph-theory,Python,Python 3.x,Networkx,Graph Theory,我有一个网络二部图。 代码如下: 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

我有一个网络二部图。 代码如下:

    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()
以及输出:

我需要将左侧节点展开,以便它们展开,并缩短右侧节点标签(假设前四个字符)


我试图找到解决办法,但没有成功。谢谢。

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

首先我们有这个图表

左数组的大小远小于右数组的大小,因此左数组是按非比例绘制的。要正确绘制,应修改位置更新功能:

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

我们知道
TCsNames
大于
USsNames
,因此我们可以将每个
USsNames
节点的Y位置乘以它们的比率:

pos.update({node:[1,index*(len(TCsNames)/len(USsNames))]对于索引,枚举中的节点(USsNames)})

现在我们有了这个图表:

要裁剪节点标签,应使用
labels
参数修改
draw\u networkx\u标签

nx.draw\u networkx\u标签(G,pos,标签=节点\u标签,字体\u大小=8)

节点_标签
等于:

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

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