Рисование решеток и графиков с помощью Networkx

Я хочу нарисовать квадратную решетку с помощью Networkx. Я сделал что-то вроде этого:

import matplotlib.pyplot as plt
import numpy as np
import networkx as nx
L=4

G = nx.Graph()

pos={}
for i in np.arange(L*L):
   pos[i] = (i/L,i%L)

nx.draw_networkx_nodes(G,pos,node_size=50,node_color='k')    

plt.show()

Однако на выходе просто пустая цифра. Как решить эту проблему?

Кроме того, я хотел бы соединить точки по горизонтали и вертикали стрелками. Направление стрелок, идущих от (i,j) to (i+1,j), должно зависеть от знака элемента i,j матрицы A, которая у меня уже есть. Как это сделать?


person lovespeed    schedule 02.08.2013    source источник


Ответы (1)


Это явный конструктор графа для этого nx.grid_2d_graph:

G = nx.grid_2d_graph(L,L)
nx.draw(G,node_size=2000)
plt.show()

введите здесь описание изображения

Мы можем преобразовать этот неориентированный граф в ориентированный граф, который соответствует вашим критериям ребра. В качестве примера я удалил ребра, которые указывают в сторону от начала координат. Вы можете адаптировать это в соответствии с вашими потребностями:

G2 = nx.DiGraph(G)
for edge in G2.edges():
    if edge != tuple(sorted(edge)):
        G2.remove_edge(*edge)

nx.draw_spectral(G2,node_size=600,node_color='w')

введите здесь описание изображения

person Hooked    schedule 02.08.2013