2014-09-16 16 views
7

Po aktualizacji matplotlib do bieżącej wersji napotykam problem z etykietami węzłów w networkX: jeśli używam polecenia nx.draw(G), otrzymuję wykres, ale nie są wyświetlane etykiety. Ale porozmawiajmy z przykładami:pylab/networkx; brak etykiet węzłów wyświetlanych po aktualizacji

import networkx as nx 
import matplotlib.pylab as plt 

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

to zwraca prawidłowy wykres, ale bez etykiet węzłów. Nawet jeśli przekazuję etykiety bezpośrednio, tak jak w przypadku: , nadal nie ma etykiet. Jestem prawie pewien, że to (szczególnie górny) działało wczoraj przed aktualizacją. Czy była tam zmiana w stosunku do matplotlib 1.3.x (nie pamiętam dokładnie tego, z którego wcześniej korzystałem)? Obecne wersje są:

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 

trochę więcej: jeśli biegnę górną kod z nx.draw(T, with_labels=True) mam działkę (dodatkowe okno w ustawieniach) i kiedy go zamknąć do TypeError: bad argument type for built-in operation odskoczy. Nie dzieje się tak, jeśli uruchomię nx.draw(T, with_labels=False), co jest bardzo mylące, ponieważ uważam, że argument with_labels przyjmuje wartość boolowską (see here), która (częściowo) nie jest ...?

Czy coś tu nie rozumiem?

Edytuj: @ tcaswell hope that helps!

--------------------------------------------------------------------------- 
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 

(jestem ani matematykiem, ani programistą, ale chętny do nauki, więc proszę o cierpliwość!)

+0

Czy nie należy "importować sieci" to 'import networkx'? – unutbu

+0

Cholerna funkcja autokorekty na Macu :(to jest właściwa droga w kodzie, została właśnie poprawiona w przeglądarce –

+0

Mogę potwierdzić, że etykiety nie pojawiają się z 1.4. – tacaswell

Odpowiedz

4

to uderzenie znane (ale nierozwiązany) błąd w backend OSX (#3470) .

Przejście na jeden z serwerów zaplecza opartego na Aggu powinno rozwiązać problem, unikając go.

UPDATE

Część problemu została zidentyfikowana i połączyła https://github.com/matplotlib/matplotlib/pull/3564. Ta poprawka powinna być w mpl v1.4.1 i nowszych.

Powiązane problemy