Я пытаюсь построить график и сделать его "красивым". Но сейчас я получаю имена, выведенные за границы, и имена, нанесенные слишком близко друг к другу.
Поэтому я ищу способ иметь приличный пробел и пространство между узлами. Я экспериментировал со значением 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