"TypeError: требуется байтоподобный объект, а не 'str'" в savefig при использовании usetex: true - PullRequest
0 голосов
/ 28 ноября 2018

При использовании savefig с text.usetex: true в matplotlib я получаю TypeError: a bytes-like object is required, not 'str'

РЕДАКТИРОВАТЬ: Решение для меня было обновить Matplotlib с 2.1.0 до 3.0.2

Я могу сохранить в формате png с помощью usetex: true, но не pdf.Я могу сохранить в PDF с usetex: ложь.Вот минимальный код, необходимый для выдачи ошибки:

import matplotlib as mpl
mpl.use('pdf')
import matplotlib.pyplot as plt

mpl.rcParams['text.usetex'] = True
fig, axes = plt.subplots(1, 1)
fig.savefig('test.pdf')

У меня установлен Miktex 2.9, а также самые последние версии dvipng и Ghostscript, упомянутые здесь: https://matplotlib.org/tutorials/text/usetex.html?highlight=usetex

Iдобавил следующее в мой путь:

C:\Program Files\gs\gs9.26\bin
C:\Program Files\MiKTeX 2.9\miktex\bin\x64

Я использую Windows 10, Python 3.6.3 и matplotlib 2.1.0.

Я также попытался удалить мой .matplotlib / tex.cacheкаталог, без успеха.

Полный возврат:

File ".\usetex.py", line 9, in <module>
    fig.savefig('test.pdf')
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\figure.py", line 1814, in savefig
    self.canvas.print_figure(fname, **kwargs)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\backend_bases.py", line 2259, in print_figure
    **kwargs)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\backends\backend_pdf.py", line 2592, in print_pdf
    self.figure.draw(renderer)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\figure.py", line 1295, in draw
    renderer, self, artists, self.suppressComposite)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\image.py", line 138, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\axes\_base.py", line 2399, in draw
    mimage._draw_list_compositing_images(renderer, self, artists)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\image.py", line 138, in _draw_list_compositing_images
    a.draw(renderer)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\axis.py", line 1138, in draw
    tick.draw(renderer)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\axis.py", line 282, in draw
    self.label1.draw(renderer)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\artist.py", line 55, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\text.py", line 799, in draw
    mtext=mtext)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\backends\backend_pdf.py", line 1944, in draw_tex
    pdfname = self.file.dviFontName(dvifont)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\backends\backend_pdf.py", line 688, in dviFontName
    psfont = self.texFontMap[dvifont.texname]
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\dviread.py", line 866, in __getitem__
    fn = find_tex_file(fn)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\site-packages\matplotlib\dviread.py", line 1045, in find_tex_file
    stderr=subprocess.PIPE)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\subprocess.py", line 709, in __init__
    restore_signals, start_new_session)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\subprocess.py", line 971, in _execute_child
    args = list2cmdline(args)
  File "C:\Users\bob\AppData\Local\Programs\Python\Python36-32\lib\subprocess.py", line 461, in list2cmdline
    needquote = (" " in arg) or ("\t" in arg) or not arg
TypeError: a bytes-like object is required, not 'str'

1 Ответ

0 голосов
/ 29 ноября 2018

Благодаря @ImportanceOfBeingErnest я обновил matplotlib с 2.1.0 до 3.0.2, и ошибка больше не появляется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...