给定一个邻接矩阵,如何用matplotlib画图?
Given an adjacency matrix, How to draw a graph with matplotlib?
我有一个由其邻接矩阵(一个 numpy 数组)描述的无向图,我想绘制它,顶点放置在一个 n 正多边形中。此代码有效:
n = adyacency_mathix.shape[0]
axis = np.linspace(0, 2*np.pi, n, endpoint=False)
x, y = np.cos(axis), np.sin(axis)
for i in xrange(n):
for j in xrange(i + 1, n):
if self.matrix[i, j] == 1:
pyplot.plot((x[i], x[j]), (y[i], y[j]), color = 'blue')
pyplot.show()
但可以优化。
如果您只是想减少编写的代码量,您可能会对流行的 networkx
项目感兴趣。
import matplotlib.pyplot as plt
import networkx as nx
# Generating sample data
G = nx.florentine_families_graph()
adjacency_matrix = nx.adjacency_matrix(G)
# The actual work
# You may prefer `nx.from_numpy_matrix`.
G2 = nx.from_scipy_sparse_matrix(adjacency_matrix)
nx.draw_circular(G2)
plt.axis('equal')
免责声明:我是 networkx
的贡献者。
我有一个由其邻接矩阵(一个 numpy 数组)描述的无向图,我想绘制它,顶点放置在一个 n 正多边形中。此代码有效:
n = adyacency_mathix.shape[0]
axis = np.linspace(0, 2*np.pi, n, endpoint=False)
x, y = np.cos(axis), np.sin(axis)
for i in xrange(n):
for j in xrange(i + 1, n):
if self.matrix[i, j] == 1:
pyplot.plot((x[i], x[j]), (y[i], y[j]), color = 'blue')
pyplot.show()
但可以优化。
如果您只是想减少编写的代码量,您可能会对流行的 networkx
项目感兴趣。
import matplotlib.pyplot as plt
import networkx as nx
# Generating sample data
G = nx.florentine_families_graph()
adjacency_matrix = nx.adjacency_matrix(G)
# The actual work
# You may prefer `nx.from_numpy_matrix`.
G2 = nx.from_scipy_sparse_matrix(adjacency_matrix)
nx.draw_circular(G2)
plt.axis('equal')
免责声明:我是 networkx
的贡献者。