我有以下代码,它使用 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 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/