繁体   English   中英

Networkx:图形标签混淆不清

[英]Networkx: Graph Labels getting mixed up and not adjusted

所以我使用networkx库(单图)制作了我的图。 当我贴标签时,它看起来不正确,变得混乱起来。 有些单词的长度比其他单词更长,并且超出了节点的边界。 可以调整我的图表,使所有内容看起来清晰易懂吗?

我也希望节点像一个点,并且标签出现在节点上而不是节点内部。

像这样

图片

我做的图..

图片

这是代码。

import networkx as nx
import matplotlib.pyplot as plt
import numpy as np
from networkx.algorithms import community
from networkx.algorithms import bipartite


G1 = nx.read_edgelist("abcd.txt")
print(nx.info(G1))
c = bipartite.color(G1)
nx.set_node_attributes(G1, c, 'bipartite')
type1  = {n for n, d in G1.nodes(data=True) if d['bipartite']==0}
type2  = {n for n, d in G1.nodes(data=True) if d['bipartite']==1}
G = bipartite.projected_graph(G1, type1)
type2g = bipartite.projected_graph(G1, type2)


pos = nx.spring_layout(G,k=0.30,iterations=50)

nx.is_bipartite(G1)
#average clustering
nx.average_clustering(G1)

#Diameter
print("Diameter:",nx.diameter(G1))

options = {
    'node_color': 'purple',
    'node_size': 40,
    'line_color': 'yellow',
    'linewidths': 0,
    'width': 0.3,
}

#degeree plotting
def plot_degree_distribution(wiki):
    degs = {}
    for n in wiki.nodes():
        deg = wiki.degree(n)

        if deg not in degs:
            degs[deg] = 0

        degs[deg] += 1
    items = sorted(degs.items())

    fig = plt.figure()
    ax = fig.add_subplot(111)
    ax.plot([k for (k, v) in items], [v for (k, v) in items])
    ax.set_xscale('log')
    ax.set_yscale('log')
    plt.title("Degree Distribution")
    fig.savefig("degree_distribution.png")


# plot_degree_distribution(G)
d = []  # create a set
for n in G.nodes():
    d.append(G.degree(n))

ec = []  # create a set
for e in G.edges():
    if (G.degree(e[0]) > G.degree(e[1])):
        ec.append(G.degree(e[0]))
    else:
        ec.append(G.degree(e[1]))

pos = nx.spring_layout(G,k=1.5, iterations=200)

factor = 25  # to change the size of nodes with respect to their degree


nx.draw_networkx(G, pos,
        edge_color=ec, edge_cmap=plt.cm.plasma,  # edge color
        node_color=d, cmap=plt.cm.plasma,  # node color
        node_size=[x * factor for x in d])  # node sizse
plt.savefig ("simple_graph.png")
fig = plt.gcf()
fig.set_size_inches((10,10))
plt.show()

将弹簧布局更改为圆形布局将帮助您获得更好的标签可视化效果。

cgraph=nx.gnp_random_graph(15,p=0.5)
labels={}
for k in range(15):
    labels[k]='long named node '+str(k)

circPos=nx.circular_layout(cgraph)
nx.draw_networkx_labels(cgraph,pos=circPos,labels=labels) 
nx.draw(cgraph,pos=circPos)

在此处输入图片说明

同样,如果边缘标签难以可视化,则可以通过如下更改布局位置来更改标签的位置。

pos_attrs = {}
for node, coords in circPos.items():
    pos_attrs[node] = (coords[0]+0.1*(-1)*np.sign(coords[0]), coords[1]+0.1*(-1)*np.sign(coords[1]))
nx.draw_networkx_labels(cgraph,pos=circPos,labels=labels) 
nx.draw(cgraph,pos=pos_attrs)

在此处输入图片说明

此处介绍了另一种在圆形布局上处理标签的好方法: NetworkX节点标签的相对位置

希望能帮助到你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM