как сделать представление графа networkx более привлекательным - PullRequest
0 голосов
/ 15 марта 2020

Я пытаюсь построить график и сделать его "красивым". Но сейчас я получаю имена, выведенные за границы, и имена, нанесенные слишком близко друг к другу.

Поэтому я ищу способ иметь приличный пробел и пространство между узлами. Я экспериментировал со значением k в функции "draw_networkx" от networkx. А также с функцией «поля» из matplotlib.pyplot. Я также попытался добавить длину в функцию pythonx "add_edge". Но все безрезультатно. Такие вещи, как "draw_circular", также не дали эстетически приятных результатов.

Я включу два текстовых файла внизу в блоки кода. На данный момент это код. Комментарий не так полезен (и на голландском), он предназначен для людей, которые будут использовать код, но не могут кодировать:

# Maak lege personen lijst, laad bestand in met oude personen, voeg alle personen toe aan personenlijst
nodes = []
ins = open('nodes.txt', "r")
for line in ins:
    line = line.rstrip('\n')
    node = re.split(r'\t+', line) 
    nodes.append(node)

# Maak lege muilen lijst, laad bestand in met oude muilen, voeg alle muilen toe aan muilenlijst
edges = []
ins = open('edges.txt', "r")
for line in ins:
    line = line.rstrip('\n')
    edge = re.split(r'\t+', line) 
    edges.append(edge)

# Graaf opvragen:
G = nx.Graph()

# Dict naam naar geslacht
naam_geslacht = {}
for node in nodes:
    naam_geslacht[node[0]] = node[1]

# Nodes toevoegen
for node in nodes:
    G.add_node(node[0])

# Edges toevoegen
for edge in edges:
    G.add_edge(edge[0], edge[1], length = 50)

# Eigenschappen opmaken
geslachtenlijst = []
for node in G:
    if naam_geslacht[node] == "vrouw":
        geslachtenlijst.append("pink")
    if naam_geslacht[node] == "man":
        geslachtenlijst.append("lightblue")

# Plot graaf
nx.draw_networkx(G, k = 0.3, node_color = geslachtenlijst, with_labels= True)
plt.axis('off')

# Maak getallen groter indien naam niet volledig past
plt.margins(0.2,0.2)
plt.show()

Два текстовых файла:

узлов:

persoon1   man
persoon2    man
persoon3    vrouw
persoon4    vrouw
persoon5  vrouw
persoon6  vrouw
persoon7 man
persoon8 man
persoon9    vrouw
persoon10 vrouw

края:

persoon3    persoon2
persoon4    persoon2
persoon5  persoon2
persoon9    persoon2
persoon6  persoon7
persoon6  persoon8
persoon10 persoon1
...