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ść!)
Czy nie należy "importować sieci" to 'import networkx'? – unutbu
Cholerna funkcja autokorekty na Macu :(to jest właściwa droga w kodzie, została właśnie poprawiona w przeglądarce –
Mogę potwierdzić, że etykiety nie pojawiają się z 1.4. – tacaswell