pylab/networkx更新后未显示节点标签

7

我更新了 matplotlib 到当前版本后,在 networkX 中遇到了一个节点标签的问题:如果我使用 nx.draw(G) 命令,我可以得到一张图,但是没有标签显示。让我们通过例子来说明:

import networkx as nx
import matplotlib.pylab as plt

T=nx.Graph()
T.add_edge(0,1)
nx.draw(T)
plt.show()

这将返回一个有效的图,但没有节点标签。即使我直接传递标签,例如:
import networkx as nx
import matplotlib.pylab as plt

T=nx.Graph()
T.add_edge(0,1)
labs={}
labs[0]='cake'
labs[1]='cookie'
nx.draw(T,labels=labs)
plt.show()

还没有标签。我很确定在更新之前(特别是上面的那个)它是可以正常工作的。那么,从 matplotlib 1.3.x(不记得之前运行的确切版本号了)到现在是否有任何更改?当前的版本为:

matplotlib (1.4.0)   (had to downgrade the pyparsing to 1.5.7 after updating the matplotlib)
networkx (1.9)
python 2.7.6
Mac OS X 10.9.4

如果我使用nx.draw(T, with_labels=True)运行上面的代码,我会得到一个图表(在我的设置中额外的窗口),当我关闭它时,会出现一个TypeError: bad argument type for built-in operation。如果我运行nx.draw(T, with_labels=False),就不会发生这种情况,这非常令人困惑,因为我认为with_labels参数接受一个布尔值(请参见此处),但它(部分)不是这样的……?
我是否有什么误解?
编辑:@tcaswell 希望这可以帮助!
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/usr/local/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs)
     57     def draw_wrapper(artist, renderer, *args, **kwargs):
     58         before(artist, renderer)
---> 59         draw(artist, renderer, *args, **kwargs)
     60         after(artist, renderer)
     61 

/usr/local/lib/python2.7/site-packages/matplotlib/figure.pyc in draw(self, renderer)
   1077         dsu.sort(key=itemgetter(0))
   1078         for zorder, a, func, args in dsu:
-> 1079             func(*args)
   1080 
   1081         renderer.close_group('figure')

/usr/local/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs)
     57     def draw_wrapper(artist, renderer, *args, **kwargs):
     58         before(artist, renderer)
---> 59         draw(artist, renderer, *args, **kwargs)
     60         after(artist, renderer)
     61 

/usr/local/lib/python2.7/site-packages/matplotlib/axes/_base.pyc in draw(self, renderer, inframe)
   2090 
   2091         for zorder, a in dsu:
-> 2092             a.draw(renderer)
   2093 
   2094         renderer.close_group('axes')

/usr/local/lib/python2.7/site-packages/matplotlib/artist.pyc in draw_wrapper(artist, renderer, *args, **kwargs)
     57     def draw_wrapper(artist, renderer, *args, **kwargs):
     58         before(artist, renderer)
---> 59         draw(artist, renderer, *args, **kwargs)
     60         after(artist, renderer)
     61 

/usr/local/lib/python2.7/site-packages/matplotlib/text.pyc in draw(self, renderer)
    536         renderer.open_group('text', self.get_gid())
    537 
--> 538         bbox, info, descent = self._get_layout(renderer)
    539         trans = self.get_transform()
    540 

/usr/local/lib/python2.7/site-packages/matplotlib/text.pyc in _get_layout(self, renderer)
    309         tmp, lp_h, lp_bl = renderer.get_text_width_height_descent('lp',
    310                                                          self._fontproperties,
--> 311                                                          ismath=False)
    312         offsety = (lp_h - lp_bl) * self._linespacing
    313 

/usr/local/lib/python2.7/site-packages/matplotlib/backends/backend_macosx.pyc in get_text_width_height_descent(self, s, prop, ismath)
    164         size = self.points_to_pixels(points)
    165         width, height, descent = self.gc.get_text_width_height_descent(
--> 166             six.text_type(s), family, size, weight, style)
    167         return  width, height, 0.0*descent
    168 

TypeError: bad argument type for built-in operation

我既不是数学家也不是程序员,但愿意学习,请耐心等待!


“import networks” 应该改为 “import networkx” 吧? - unutbu
你能提供 TypeError 的完整堆栈跟踪吗? - tacaswell
我已经将完整的回溯信息添加到问题中。 - olga.bio
因此,在使用matplotlib==1.4.0networkx==1.8.1时,无论标签是否打开,我都会遇到这些错误。更新到networkx==1.9后,只有在一般情况下打开(或使用)标签时才会出现相同的错误。 - Panagiotis
1
你是否正在使用osx后端?请参见https://github.com/matplotlib/matplotlib/issues/3470相关链接。尝试使用任何*agg后端。 - tacaswell
显示剩余5条评论
1个回答

4

这是在OSX后端中出现的一个已知(但未解决)的错误(#3470)。

通过切换到其中一个基于Agg的后端,可以“解决”该问题。

更新

问题的一部分已被识别并合并https://github.com/matplotlib/matplotlib/pull/3564。 此修复程序应该在mpl v1.4.1及更高版本中可用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接