我有以下代码,它使用 NetworkX 在 Python 2.7 中工作。基本上,它只是绘制度节点的直方图,如下所示:

plt.hist(nx.degree(G).values())
plt.xlabel('Degree')
plt.ylabel('Number of Subjects')
plt.savefig('network_degree.png') #Save as file, format specified in argument

python - 来自 NetworkX 度值的直方图 - Python 2 与 Python 3-LMLPHP

当我尝试在 Python 3 下运行相同的代码时,出现以下错误:
Traceback (most recent call last):
  File "filename.py", line 71, in <module>
    plt.hist(nx.degree(G).values())
  File "/Users/user/anaconda/envs/py3/lib/python3.5/site-packages/matplotlib/pyplot.py", line 2958, in hist
    stacked=stacked, data=data, **kwargs)
  File "/Users/user/anaconda/envs/py3/lib/python3.5/site-packages/matplotlib/__init__.py", line 1812, in inner
    return func(ax, *args, **kwargs)
  File "/Users/user/anaconda/envs/py3/lib/python3.5/site-packages/matplotlib/axes/_axes.py", line 5960, in hist
    x = _normalize_input(x, 'x')
  File "/Users/user/anaconda/envs/py3/lib/python3.5/site-packages/matplotlib/axes/_axes.py", line 5902, in _normalize_input
    "{ename} must be 1D or 2D".format(ename=ename))
ValueError: x must be 1D or 2D

我刚刚开始使用 Python 3,使用我希望的非常简单的代码。有什么变化?

最佳答案

在 Python2 中,dict.values 方法返回一个列表。
在 Python3 中,它返回 a dict_values object :

In [197]: nx.degree(G).values()
Out[197]: dict_values([2, 2, 2, 2])

由于 plt.hist 接受列表,但不接受 dict_values 对象,因此将 dict_values 转换为列表:
  plt.hist(list(nx.degree(G).values()))

关于python - 来自 NetworkX 度值的直方图 - Python 2 与 Python 3,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38885670/

10-13 03:36