Drzewo ukorzenione w Pythonie - wizualizacja

Odpowiedz Nowy wątek
2019-01-26 13:59
0
import numpy as np
import networkx as nx
import matplotlib.pyplot as plt

df = pd.DataFrame({ 'from':['A', 'A', 'A', 'D', 'D', 'D', 'H', 'H', 'B', 'B', 'F'], 'to':['D', 'C', 'B', 'H', 'I', 'G', 'K', 'L', 'E', 'F', 'J']})
print(df)

G = nx.from_pandas_edgelist(df, 'from', 'to')

nx.draw(G, with_labels=True)
plt.show()

Napisałam powyższy kod, który tworzy mi graf z jego wizualizacją. Jednak chciałabym ten graf ukorzenić, bo w moich wizualizacjach nie ma głównego węzła (wierzchołka). Czy ktoś może ma pomysł jak mogę tego dokonać? Męczę się z tym niemiłosiernie, nie mogąc znaleźć odpowiedzi na ten problem.

Pozostało 580 znaków

2019-01-26 14:17
0

OK, Utworzyłaś spójny, acykliczny graf (czyli drzewo). Co Masz na myśli "ukorzenić", dowolny wierzchołek może być jego korzeniem, zależy, jak na to patrzeć:)


edytowany 1x, ostatnio: lion137, 2019-01-26 14:20

Pozostało 580 znaków

2019-01-26 14:19
0

No właśnie: 'dowolny wierzchołek może być jego korzeniem'. Chodzi mi o to, że chciałabym by moje drzewo było rysowane począwszy od wierzchołka, który wyznaczę. Np. jeżeli korzeniem jest mój punkt A to całe drzewo rozchodzi się od tego wierzchołka. Wiem, że istnieją funkcje, które w networkxie jakoś to drzewo potrafią ukorzenić, ale próbowałam wszystkiego i nie potrafię tego wykonać.

Pozostało 580 znaków

2019-01-26 14:32
0

Rzuć okiem tutaj:https://stackoverflow.com/que[...]kx-to-output-a-tree-structure


Pozostało 580 znaków

2019-01-26 14:43
0

Czytałam już ten post właśnie ;) Problem jest taki, że u mnie za Chiny nie chce przejść pakiet tam używany. No i, nie mogłabym tergo raczej przerobić pod własne potrzeby, gdzie potrzebuję by wizualizacja zmieniała się po mój wybór. Jak wybiorę wierzchołek A to chcę by od niego rozgałęziało się drzewo, jak wierzchołek D to od niego, itd.

Pozostało 580 znaków

2019-01-26 21:17

Załóżmy, że chcesz, by drzewo było ukorzenione w punkcie A. Aby graf przekształcić na drzewo, trzeba wykorzystać moduł graphviz_layout [link].

import networkx as nx
import matplotlib.pyplot as plt
import pandas as pd
from networkx.drawing.nx_agraph import graphviz_layout

df = pd.DataFrame({ 'from':['A', 'A', 'A', 'D', 'D', 'D', 'H', 'H', 'B', 'B', 'F'], 'to':['D', 'C', 'B', 'H', 'I', 'G', 'K', 'L', 'E', 'F', 'J']})
G = nx.from_pandas_edgelist(df, 'from', 'to')

pos = graphviz_layout(G, prog='dot')
nx.draw(G, pos, with_labels=True, arrows=False)
plt.show()

treeA.png
Ten jednak sposób nie zawsze da Ci to, co chcesz. Posortujmy pierwszą listę malejąco:

df.sort_values(by='from', ascending=False, inplace=True)
G = nx.from_pandas_edgelist(df, 'from', 'to')

I drzewo wygląda następująco:
treeH.png
Generalnie staraj się umieścić etykietę, która ma pełnić rolę korzenia, na pierwszej pozycji w liście.

Pozostało 580 znaków

2019-01-28 16:50
0

Dziękuję. Już uporałam się z problemem za pomocą pakeitu ete3 :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0