Python показывает UnicodeEncodeError при сбросе rcParams и использовании латекса в интерактивном режиме. Я использую PyCharm 2018.1.4 вместе с iPython 5.8. Версия Python 2.7.15, версия Matplotlib 2.2.2.
Ввод 1 создает график, но выдает UnicodeEncodeError:
Python 2.7.15 |Anaconda custom (64-bit)| (default, May 1 2018, 23:32:55)
[GCC 7.2.0] on linux2
In[2]: import matplotlib.pyplot as plt
...: import numpy as np
...:
...: plt.ion()
...: plt.rcParams['text.usetex'] = True
...:
...: x = np.linspace(-10,10,1000) * 2*np.pi
...: y = np.sin(x) * 10**(-10)
...:
...: plt.plot(x,y)
...: plt.savefig('/home/proxauf/test_unicode1.png')
...: plt.close()
...:
...: plt.rcParams['text.usetex'] = False
...:
...: print "plot 1 successful"
...:
Выход 1:
Backend Qt5Agg is interactive backend. Turning interactive mode on.
plot 1 successful
Traceback (most recent call last):
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/backends/backend_qt5.py", line 519, in _draw_idle
self.draw()
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/backends/backend_agg.py", line 433, in draw
self.figure.draw(self.renderer)
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/figure.py", line 1475, in draw
renderer, self, artists, self.suppressComposite)
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/image.py", line 141, in _draw_list_compositing_images
a.draw(renderer)
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/axes/_base.py", line 2607, in draw
mimage._draw_list_compositing_images(renderer, self, artists)
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/image.py", line 141, in _draw_list_compositing_images
a.draw(renderer)
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/artist.py", line 55, in draw_wrapper
return draw(artist, renderer, *args, **kwargs)
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/axis.py", line 1192, in draw
renderer)
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/axis.py", line 1130, in _get_tick_bboxes
extent = tick.label1.get_window_extent(renderer)
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/text.py", line 922, in get_window_extent
bbox, info, descent = self._get_layout(self._renderer)
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/text.py", line 309, in _get_layout
ismath=ismath)
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/backends/backend_agg.py", line 232, in get_text_width_height_descent
s, fontsize, renderer=self)
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/texmanager.py", line 501, in get_text_width_height_descent
dvifile = self.make_dvi(tex, fontsize)
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/texmanager.py", line 361, in make_dvi
texfile = self.make_tex(tex, fontsize)
File "/scratch/seismo/proxauf/conda/lib/python2.7/site-packages/matplotlib/texmanager.py", line 259, in make_tex
fh.write(s.encode('ascii'))
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2212' in position 230: ordinal not in range(128)
Ввод 2 создает график без ошибки:
In[3]: plt.rcParams['text.usetex'] = True
...:
...: plt.plot(x,y)
...: plt.savefig('/home/proxauf/test_unicode2.png')
...: plt.close()
...:
...: print "plot 2 successful"
...:
Выход 2:
plot 2 successful
Я совсем не понимаю этого. В обоих случаях графики создаются в том виде, в каком они должны быть (в режиме Latex, см. Ниже), но в питоне Input 1 возникают проблемы при сбросе matplotlib rcParams. Однако сюжет может быть без проблем создан в нелатексном формате при text.usetex = False
с самого начала. Что здесь происходит? Любые возможные исправления? Ошибка на самом деле не проблема (программа работает нормально), но неприятность, от которой я хочу избавиться.

Обновление: Ошибка появляется только при переключении (в пределах одного выполнения кода) с text.usetex = True
на text.usetex = False
и только при axes.unicode_minus = True
. Другие направления или комбинации работают без проблем.
Обновление 2: Я воспроизвел ошибку при использовании iPython 5.8 вне PyCharm.