Mam kilka węzłów pochodzących ze skryptu, który chcę odwzorować na wykresie. Poniżej chcę użyć strzałki, aby przejść od A do D i prawdopodobnie zabarwić krawędź (na czerwono lub coś w tym stylu).
Jest to w zasadzie jak ścieżka od A do D, gdy wszystkie inne węzły są obecne. możesz wyobrazić sobie każdy węzeł jako miasta, a podróż z punktu A do D wymaga wskazówek (z grotami strzałek).
Poniższy kod tworzy wykres
import networkx as nx
import numpy as np
import matplotlib.pyplot as plt
G = nx.Graph()
G.add_edges_from(
[('A', 'B'), ('A', 'C'), ('D', 'B'), ('E', 'C'), ('E', 'F'),
('B', 'H'), ('B', 'G'), ('B', 'F'), ('C', 'G')])
val_map = {'A': 1.0,
'D': 0.5714285714285714,
'H': 0.0}
values = [val_map.get(node, 0.25) for node in G.nodes()]
nx.draw(G, cmap = plt.get_cmap('jet'), node_color = values)
plt.show()
ale chcę coś takiego, jak pokazano na obrazku.
Groty strzałek pierwszego obrazu i krawędzie w kolorze czerwonym na drugim obrazie.
(C, E)
nie jest czerwony, ponieważ wybrałem krawędzie,red_edges
kiedy nadal pracowałem z twoim nieukierunkowanym wykresem, po prostu wybierając losowo z krawędzi zwróconych przezG.edges()
. Tak powinno byćred_edges = [('A', 'C'), ('E', 'C')]
.draw_networkx_edges()
. Wyczyściłem kod i naprawiłem problemy z DiGraph.Podaję to tylko dla kompletności. Wiele się nauczyłem od Mariusa i MDML. Oto ciężary krawędzi. Przepraszam za strzały. Wygląda na to, że nie tylko ja mówię, że nie można temu zaradzić. Nie mogłem tego wyrenderować na notebooku ipython, musiałem przejść bezpośrednio z Pythona, co było problemem z szybszym wprowadzeniem moich obciążeń krawędzi.
źródło
node_labels = {node:node for node in G.nodes()}; nx.draw_networkx_labels(G, pos, labels=node_labels)
.G.add_edges_from()
linii bez konieczności ręcznego wprowadzania punktu początkowego i końcowego? Może dodanie krawędzi zdict
?Zamiast zwykłego nx.draw możesz użyć:
Na przykład:
Możesz dodać opcje, inicjując tę ** zmienną w następujący sposób:
Również niektóre funkcje obsługują
directed=True parameter
W tym przypadku ten stan jest domyślny:Dokumentacja networkx znajduje się tutaj .
źródło
Musisz użyć wykresu skierowanego zamiast wykresu, tj
Następnie utwórz listę kolorów krawędzi, których chcesz użyć, i przekaż je
nx.draw
(jak pokazuje @Marius).Podsumowując to wszystko, otrzymuję obraz poniżej. Wciąż nie jest to inne zdjęcie, które pokazujesz (nie wiem, skąd pochodzą twoje ciężary krawędzi), ale znacznie bliżej! Jeśli chcesz mieć większą kontrolę nad wyglądem wykresu wyjściowego (np. Uzyskać groty strzałek, które wyglądają jak strzałki), wypróbuj NetworkX z Graphviz .
źródło
To jest po prostu proste, jak narysować skierowany wykres za pomocą Pythona 3.x przy użyciu networkx. tylko prosta reprezentacja i może być modyfikowana, kolorowana itp. Zobacz wygenerowany wykres tutaj .
Uwaga: to tylko prosta reprezentacja. Można dodać krawędzie ważone, np
i dlatego ponownie wykreślił.
źródło
źródło