Error de Unicode al utilizar matplotlib con la escala de registro en Windows

Estoy usando python 2.6 y matplotlib. Si ejecuto el ejemplo histogram_demo.py proporcionado en la página de la galería matplotlib, funciona bien. He simplificado este script en gran medida:

import numpy as np import matplotlib.pyplot as plt mu, sigma = 100, 15 x = mu + sigma * np.random.randn(10000) fig = plt.figure() ax = fig.add_subplot(111) n, bins, patches = ax.hist(x, 50, normed=1, facecolor='green', alpha=0.75) ax.set_yscale('log') # <---- add this line to generate the error plt.show() 

Recibo este error (en la línea plt.show() ):

 TypeError: coercing to Unicode: need string or buffer, dict found 

He intentado cambiar el backend a muchos valores diferentes, nada ayuda. Estoy usando Qt4Agg . ¿Es este un problema de fuente? Parece que debe ser algo con mi configuración. Nota: Debido a otros problemas, acabo de instalar una copia nueva de python26, matplotlib, numpy, scipy. Tengo otra caja de XP que ejecuta python26 y ejecuta ambas versiones de la secuencia de comandos sin errores. Espero que alguien pueda ayudar. Muchas gracias de antemano.

Este es un error en la administración de fonts de matplotlib, en mi máquina este es el archivo /usr/lib/pymodules/python2.6/matplotlib/font_manager.py:1220. He resaltado el cambio en el fragmento de código a continuación; Esto se ha corregido en la versión más reciente de matplotlib.

 if best_font is None or best_score >= 10.0: verbose.report('findfont: Could not match %s. Returning %s' % (prop, self.defaultFont)) [+]result = self.defaultFont[fontext] [-]result = self.defaultFont print "defaultFont", result else: verbose.report('findfont: Matching %s to %s (%s) with score of %f' % (prop, best_font.name, best_font.fname, best_score)) result = best_font.fname print "best_font", result 

Este error se produce solo si no se encontró una fuente “buena” y el administrador de fonts recurre a una fuente predeterminada. Por lo tanto, el error se produjo sin motivo aparente, probablemente debido a cambios en las fonts instaladas.

¡Espero que ayude!

Tuve el mismo problema con matplotlib 0.98.5.2. Pude solucionarlo actualizando a matplotlib 1.0.1 (0.99.3 no funcionó), o eliminando mi directorio ~ / .matplotlib. No estoy seguro de cuál es el equivalente para Windows.

Tuve el mismo problema hoy, y encontré el problema en github

https://github.com/matplotlib/matplotlib/issues/198

La solución propuesta es eliminar el archivo .matplotlib/fontList.cache , y funcionó para mí.

Hoy experimenté un error similar con respecto al código que sé que, de hecho, funcionaba hace una semana. También recientemente desinstalé / reinstalé Matplotlib y Numpy, mientras comprobaba otra cosa (estoy usando Python 2.5).

El código fue algo así:

 self.ax.cla() if self.logy: self.ax.set_yscale('log') self.canvas.draw() 

Cada vez que se ejecutó con self.logy como True, falló como anteriormente. De lo contrario, funcionó perfectamente bien.

Terminé eludiendo el problema al desinstalar Matplotlib y Numpy e instalar las últimas versiones de ellos. Sin embargo, la versión que arrojaba el error había sido utilizada previamente sin problemas. Solo después de cambiar la versión anterior por la más nueva y volver, comenzó a ocurrir esto.

Quizás el proceso de desinstalación / reinstalación desordena ciertos aspectos de los archivos de configuración.

Para completar, aquí está el rastreo completo dado:

 Exception in Tkinter callback Traceback (most recent call last): File "C:\path\to\file\being\called\by\Tkinter.py", line 1081, in refresh self.canvas.draw() File "C:\Python25\Lib\site-packages\matplotlib\backends\backend_tkagg.py", line 215, in draw FigureCanvasAgg.draw(self) File "C:\Python25\Lib\site-packages\matplotlib\backends\backend_agg.py", line 314, in draw self.figure.draw(self.renderer) File "C:\Python25\Lib\site-packages\matplotlib\artist.py", line 46, in draw_wrapper draw(artist, renderer, *kl) File "C:\Python25\Lib\site-packages\matplotlib\figure.py", line 773, in draw for a in self.axes: a.draw(renderer) File "C:\Python25\Lib\site-packages\matplotlib\artist.py", line 46, in draw_wrapper draw(artist, renderer, *kl) File "C:\Python25\Lib\site-packages\matplotlib\axes.py", line 1735, in draw a.draw(renderer) File "C:\Python25\Lib\site-packages\matplotlib\artist.py", line 46, in draw_wrapper draw(artist, renderer, *kl) File "C:\Python25\Lib\site-packages\matplotlib\axis.py", line 742, in draw tick.draw(renderer) File "C:\Python25\Lib\site-packages\matplotlib\artist.py", line 46, in draw_wrapper draw(artist, renderer, *kl) File "C:\Python25\Lib\site-packages\matplotlib\axis.py", line 196, in draw self.label1.draw(renderer) File "C:\Python25\Lib\site-packages\matplotlib\text.py", line 515, in draw bbox, info = self._get_layout(renderer) File "C:\Python25\Lib\site-packages\matplotlib\text.py", line 279, in _get_layout clean_line, self._fontproperties, ismath=ismath) File "C:\Python25\Lib\site-packages\matplotlib\backends\backend_agg.py", line 156, in get_text_width_height_descent self.mathtext_parser.parse(s, self.dpi, prop) File "C:\Python25\Lib\site-packages\matplotlib\mathtext.py", line 2797, in parse font_output = fontset_class(prop, backend) File "C:\Python25\Lib\site-packages\matplotlib\mathtext.py", line 658, in __init__ self._stix_fallback = StixFonts(*args, **kwargs) File "C:\Python25\Lib\site-packages\matplotlib\mathtext.py", line 900, in __init__ fullpath = findfont(name) File "C:\Python25\Lib\site-packages\matplotlib\font_manager.py", line 1306, in findfont if not os.path.exists(font): File "C:\Python25\lib\ntpath.py", line 255, in exists st = os.stat(path) TypeError: coercing to Unicode: need string or buffer, dict found 

Gracias por explicar el tema!

Ya que estoy usando la instalación del sistema Mac OS 10.6 de matplotlib, (y estoy atascado en Python2.5 debido a otros requisitos del paquete) no estoy interesado en actualizar matplotlib (simplemente no puedo manejar todas las versiones de open- paquetes fuente!)

Así que la solución que intenté al azar, que funcionó, fue editar mi ~/.matplotlib/matplotlibrc y habilitar LaTex, configurando text.usetex : True (ya que mostraba una larga lista de fonts compatibles, por lo que pensé que podría ser más difícil encontrar una fuente “buena”).

No es una “solución” real, pero conseguí que mi script funcionara con un mínimo de tiempo de inactividad y mantenimiento