2017-02-21 19 views
0

ipythonノートブックのmatplotlibプロットにユニコード文字をプロットしようとしています。matplotlibプロットのUnicodeテキストでipythonにエラーが発生する

# For example: 
plt.title("α") 

ただし、UnicodeEncodeErrorとなります。 unicode_literalsモジュールのインポートを、matplotlibのマニュアルに示唆しているようにここで試しました:http://matplotlib.org/examples/text_labels_and_annotations/unicode_demo.htmlplt.title(u"α")というユニコード文字列を使ってみましたが、ここに示唆されています:Unicode in ipython notebook

いずれのアプローチもエラー出力に影響しませんでした(これは私が最後に書きました)。

ipythonノートブックでmatplotlibにプロットするユニコード文字列を取得するにはどうすればよいですか?

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) 
+0

'plt.title("α ")'は 'unicode_literals'を使うときにうまく動作します。将来のインポートを省略すると、 'plt.title(u"α ")'も同様に機能します。だからあなたは問題の[mcve]を提供する必要があると思います。特に、トレースバックは 'texmanager.py'でいくつかのラテックスレンダリングに沿っているようです。実際にはラテックスを使っていることを示唆しています。もちろん、これはユニコード文字と一緒に問題になる可能性があります。 – ImportanceOfBeingErnest

答えて

0

それは何が起こっているのか確かに言うことは困難ですが、私は、私は同様の問題を持っていたし、私はそれが将来の校正用のPython 2とPython 3の両方で実行したいときに私が何をしたかを伝えることができます。

#!/usr/bin/env python 
# coding: utf-8 
import six,sys 
# needed for utf-encoding on python 2: 
if six.PY2: 
    reload(sys) 
    sys.setdefaultencoding('utf8') 

注PEP-0263規格で規定さgood reasonため、# coding: utf-8ラインが実際に重要であり、何かをすること:ファイルのヘッダに

。それを試して、もしそれが修正されるかどうかを見てください。そうでない場合は、完全な例を挙げてください。私はそれに応じてこの回答を更新します。

また、plt.title(u'α')に変更してみてください。

0

help amoose136ありがとうございます。 しかし、私はそれを把握することができました。 2つのことがありました。

matplotlib.rc('text', usetex=True) 

TeXとユニコード混在させないでください:

まず、私は、テキストを行うためにはTeXを使用していました。

この行を省略すると、matplotlibのドキュメントの例が機能します(質問情報内)。

次に、コンパイルされましたが、自分の(ギリシャ語の)文字がボックスとして表示されました。 Non-ASCII characters in Matplotlib、 をしてArialのように、私の文字をサポートするフォントを使用: は、この問題を解決するために、私はここでアドバイスに従って、これは誰にも役立ちます

matplotlib.rc('font', family='Arial') 

希望を!

関連する問題