Автор оригинала: Robin Andrews.
Часть 1 – Основы Networkx
ettewxx Это мощный пакет Python, который позволяет легко работать с графиками в Python. Объединяя его с matplotlib.pyplot Пакет даже делает его простым для рисования графов. Это очень полезно при изучении или обучения о Графики для уровня компьютерной науки.
# Auto formatting - completely optional, requires installation. %load_ext nb_black
Настраивать
import networkx as nx G = nx.Graph() print(G.nodes(), G.edges())
[] []
Узлы
G.add_node("A")
print(G.nodes())
['A']
G.add_nodes_from(["B", "C"])
print(G.nodes())
print("Number of nodes in graph: ", G.number_of_nodes())
['A', 'B', 'C'] Number of nodes in graph: 3
Ребра
Хорошо, так что теперь давайте посмотрим, как мы добавляем края на наш график.
G.clear() # First we clear the graph so we can start fresh
G.add_nodes_from(["A", "B", "C"])
G.add_edge("A", "B", weight=5)
G.add_edge("B", "C", weight=7)
G.add_edge("C", "A", weight=2)
print(G.nodes(), G.edges())
['A', 'B', 'C'] [('A', 'B'), ('A', 'C'), ('B', 'C')]
Веселая часть – Рисование вашего графика
Теперь мы можем нарисовать наш график. Они говорят, что картина стоит тысячи слов, и я согласен. Python делает эту супер легко для нас только с несколькими строками кода.
%matplotlib inline
import matplotlib.pyplot as plt
pos = nx.spring_layout(G)
weights = nx.get_edge_attributes(G, "weight")
nx.draw_networkx(G, pos, with_labels=True)
nx.draw_networkx_edge_labels(G, pos, edge_labels=weights)
plt.title("Basic Graphs with Networkx")
plt.gcf().canvas.set_window_title("")
plt.show()
Я для одного я довольно впечатлен ettewxx упаковка. Эта статья охватывает только самые основы, но уже мы нарисовали взвешенные графики и научились добавлять узлы и края к существующему графику, используя ettewxx мощная функциональность.
Вот полный список для этого примера для вашего удобства:
import matplotlib.pyplot as plt
import networkx as nx
import numpy as np
G = nx.Graph() # Create empty graph
G.add_nodes_from(["A", "B", "C"]) # Add nodes
# Add edges
G.add_edge("A", "B", weight=5)
G.add_edge("B", "C", weight=7)
G.add_edge("C", "A", weight=2)
# Create drawing
pos = nx.spring_layout(G) # List of positions of nodes
weights = nx.get_edge_attributes(G, "weight") # List of weights
nx.draw_networkx(G, pos, with_labels=True)
nx.draw_networkx_edge_labels(G, pos, edge_labels=weights)
plt.title("Basic Graphs with Networkx")
plt.gcf().canvas.set_window_title("") # Hide window title
# Display Graph
plt.show()