Я пытаюсь нарисовать символы юникода на графике matplotlib в ноутбуке ipython.Юникод текст в графике matplotlib дает ошибку в ipython
# For example:
plt.title("α")
Однако он дает UnicodeEncodeError
. Я попытался импортировать модуль unicode_literals
, как это предлагается в документации matplotlib: http://matplotlib.org/examples/text_labels_and_annotations/unicode_demo.html. Я также попытался использовать строку unicode с plt.title(u"α")
, как предложено здесь: Unicode in ipython notebook.
Ни один из подходов не повлиял на вывод ошибки (который я поставил внизу).
Как я могу получить строки unicode для построения в matplotlib в ноутбуке ipython?
Я не заинтересован в использовании LaTeX в этом случае, если это нормально.
---------------------------------------------------------------------------
UnicodeEncodeError Traceback (most recent call last)
/usr/local/lib/python3.5/site-packages/IPython/core/formatters.py in __call__(self, obj)
305 pass
306 else:
--> 307 return printer(obj)
308 # Finally look for special method names
309 method = get_real_method(obj, self.print_method)
/usr/local/lib/python3.5/site-packages/IPython/core/pylabtools.py in <lambda>(fig)
225
226 if 'png' in formats:
--> 227 png_formatter.for_type(Figure, lambda fig: print_figure(fig, 'png', **kwargs))
228 if 'retina' in formats or 'png2x' in formats:
229 png_formatter.for_type(Figure, lambda fig: retina_figure(fig, **kwargs))
/usr/local/lib/python3.5/site-packages/IPython/core/pylabtools.py in print_figure(fig, fmt, bbox_inches, **kwargs)
117
118 bytes_io = BytesIO()
--> 119 fig.canvas.print_figure(bytes_io, **kw)
120 data = bytes_io.getvalue()
121 if fmt == 'svg':
/usr/local/lib/python3.5/site-packages/matplotlib/backend_bases.py in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, **kwargs)
2178 orientation=orientation,
2179 dryrun=True,
-> 2180 **kwargs)
2181 renderer = self.figure._cachedRenderer
2182 bbox_inches = self.figure.get_tightbbox(renderer)
/usr/local/lib/python3.5/site-packages/matplotlib/backends/backend_agg.py in print_png(self, filename_or_obj, *args, **kwargs)
525
526 def print_png(self, filename_or_obj, *args, **kwargs):
--> 527 FigureCanvasAgg.draw(self)
528 renderer = self.get_renderer()
529 original_dpi = renderer.dpi
/usr/local/lib/python3.5/site-packages/matplotlib/backends/backend_agg.py in draw(self)
472
473 try:
--> 474 self.figure.draw(self.renderer)
475 finally:
476 RendererAgg.lock.release()
/usr/local/lib/python3.5/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
60 def draw_wrapper(artist, renderer, *args, **kwargs):
61 before(artist, renderer)
---> 62 draw(artist, renderer, *args, **kwargs)
63 after(artist, renderer)
64
/usr/local/lib/python3.5/site-packages/matplotlib/figure.py in draw(self, renderer)
1157 dsu.sort(key=itemgetter(0))
1158 for zorder, a, func, args in dsu:
-> 1159 func(*args)
1160
1161 renderer.close_group('figure')
/usr/local/lib/python3.5/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
60 def draw_wrapper(artist, renderer, *args, **kwargs):
61 before(artist, renderer)
---> 62 draw(artist, renderer, *args, **kwargs)
63 after(artist, renderer)
64
/usr/local/lib/python3.5/site-packages/matplotlib/axes/_base.py in draw(self, renderer, inframe)
2317
2318 for zorder, a in dsu:
-> 2319 a.draw(renderer)
2320
2321 renderer.close_group('axes')
/usr/local/lib/python3.5/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
60 def draw_wrapper(artist, renderer, *args, **kwargs):
61 before(artist, renderer)
---> 62 draw(artist, renderer, *args, **kwargs)
63 after(artist, renderer)
64
/usr/local/lib/python3.5/site-packages/matplotlib/text.py in draw(self, renderer)
747
748 with _wrap_text(self) as textobj:
--> 749 bbox, info, descent = textobj._get_layout(renderer)
750 trans = textobj.get_transform()
751
/usr/local/lib/python3.5/site-packages/matplotlib/text.py in _get_layout(self, renderer)
359 w, h, d = renderer.get_text_width_height_descent(clean_line,
360 self._fontproperties,
--> 361 ismath=ismath)
362 else:
363 w, h, d = 0, 0, 0
/usr/local/lib/python3.5/site-packages/matplotlib/backends/backend_agg.py in get_text_width_height_descent(self, s, prop, ismath)
227 fontsize = prop.get_size_in_points()
228 w, h, d = texmanager.get_text_width_height_descent(s, fontsize,
--> 229 renderer=self)
230 return w, h, d
231
/usr/local/lib/python3.5/site-packages/matplotlib/texmanager.py in get_text_width_height_descent(self, tex, fontsize, renderer)
673 else:
674 # use dviread. It sometimes returns a wrong descent.
--> 675 dvifile = self.make_dvi(tex, fontsize)
676 dvi = dviread.Dvi(dvifile, 72 * dpi_fraction)
677 try:
/usr/local/lib/python3.5/site-packages/matplotlib/texmanager.py in make_dvi(self, tex, fontsize)
397
398 if DEBUG or not os.path.exists(dvifile):
--> 399 texfile = self.make_tex(tex, fontsize)
400 outfile = basefile + '.output'
401 command = self._get_shell_cmd(
/usr/local/lib/python3.5/site-packages/matplotlib/texmanager.py in make_tex(self, tex, fontsize)
312 else:
313 try:
--> 314 fh.write(s.encode('ascii'))
315 except UnicodeEncodeError as err:
316 mpl.verbose.report("You are using unicode and latex, but "
UnicodeEncodeError: 'ascii' codec can't encode character '\xb0' in position 289: ordinal not in range(128)
Для меня 'plt.title (" α ")' отлично работает при использовании 'unicode_literals'. Опуская будущий импорт, 'plt.title (u" α ")' работает также. Поэтому я думаю, вам нужно предоставить [mcve] проблемы. Особенно кажется, что трассировка идет вдоль некоторой латексной рендеринга в 'texmanager.py', что предполагает, что вы * на самом деле используете Latex. Конечно, это может быть проблемой вместе с символами юникода. – ImportanceOfBeingErnest