2014-09-16 2 views
7

Dopo aver aggiornato matplotlib alla versione corrente, ho riscontrato un problema con le etichette del nodo in networkX: se utilizzo il comando nx.draw(G), ottengo un grafico, ma non vengono visualizzate etichette. Ma cerchiamo di parlare con gli esempi:pylab/networkx; nessuna etichetta del nodo visualizzata dopo l'aggiornamento

import networkx as nx 
import matplotlib.pylab as plt 

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

questo restituisce una trama valida, ma senza le etichette dei nodi. Anche se passo le etichette direttamente come in

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

non ci sono ancora etichette. Sono abbastanza sicuro che (soprattutto quello superiore) funzionasse ieri prima dell'aggiornamento. Quindi c'è stato un cambiamento da matplotlib 1.3.x (non ricordo esattamente quello che stavo correndo in precedenza)? Le versioni attuali sono:

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 

po 'di più: se corro il codice superiore con nx.draw(T, with_labels=True) ricevo una trama (finestra in più sul mio impostazioni) e quando mi chiudo un TypeError: bad argument type for built-in operation apre. Non succede se corro nx.draw(T, with_labels=False), il che è molto confuso, dal momento che ho pensato che l'argomento with_labels prendesse un valore booleano (see here), che non lo fa (parzialmente) ....?

Sono frainteso qualcosa qui?

Modifica: @tcaswell spero che sia d'aiuto!

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

(Non sono né un matematico né un programmatore, ma disposti a imparare, quindi per favore siate pazienti!)

+0

Non è necessario "import network" essere "import networkx"? – unutbu

+0

dannata funzione di correzione automatica su Mac :(è il modo giusto nel codice, è stata corretta nel browser –

+0

Posso confermare che l'etichetta non viene visualizzata con 1.4 – tacaswell

risposta

4

Questo sta colpendo un bug noto (ma non risolto) nel backend OSX (#3470) .

Passare a uno dei backend basati su Agg dovrebbe "risolvere" il problema evitandolo.

UPDATE

Parte del problema è stato identificato e fuse https://github.com/matplotlib/matplotlib/pull/3564. Questa correzione dovrebbe essere in mpl v1.4.1 e versioni successive.