Matplotlib抱怨networkx邻接矩阵的形状

时间:2019-07-15 21:10:39

标签: python matplotlib networkx

以下代码导致解包figaspect中矩阵的形状时出错,但该形状似乎是正确的(4 x 4 2D数组)。我在做蠢事吗?

import networkx as nx
import matplotlib.pyplot as plt
g = nx.Graph()
g.add_edge(1, 2)
g.add_edge(2, 3)
g.add_edge(3, 4)
matrix = nx.to_scipy_sparse_matrix(g)
print(matrix.shape)
plt.matshow(matrix)
plt.show()

以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-118-70cfbe8cdb62> in <module>
      7 matrix = nx.to_scipy_sparse_matrix(g)
      8 print(matrix.shape)
----> 9 plt.matshow(matrix)
     10 plt.show()

/usr/local/lib/python3.7/site-packages/matplotlib/pyplot.py in matshow(A, fignum, **kwargs)
   2180         # Extract actual aspect ratio of array and make appropriately sized
   2181         # figure.
-> 2182         fig = figure(fignum, figsize=figaspect(A))
   2183         ax = fig.add_axes([0.15, 0.09, 0.775, 0.775])
   2184     im = ax.matshow(A, **kwargs)

/usr/local/lib/python3.7/site-packages/matplotlib/figure.py in figaspect(arg)
   2740     # Extract the aspect ratio of the array
   2741     if isarray:
-> 2742         nr, nc = arg.shape[:2]
   2743         arr_ratio = nr / nc
   2744     else:

ValueError: not enough values to unpack (expected 2, got 0)

但打印的形状为(4,4)

1 个答案:

答案 0 :(得分:1)

尝试使用todense

plt.matshow(matrix.todense())

在哪里

print(matrix)

输出:

  (0, 1)    1
  (1, 0)    1
  (1, 2)    1
  (2, 1)    1
  (2, 3)    1
  (3, 2)    1

然后

print(matrix.todense())

输出:

[[0 1 0 0]
 [1 0 1 0]
 [0 1 0 1]
 [0 0 1 0]]

绘图:

enter image description here