Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 将matplotlib图形保存为pdf时出错:';str';对象没有属性';解码';_Python 3.x_Matplotlib_Unicode_Latex - Fatal编程技术网

Python 3.x 将matplotlib图形保存为pdf时出错:';str';对象没有属性';解码';

Python 3.x 将matplotlib图形保存为pdf时出错:';str';对象没有属性';解码';,python-3.x,matplotlib,unicode,latex,Python 3.x,Matplotlib,Unicode,Latex,我使用以下脚本使用matplotlib生成地物: # -*- coding: utf-8 -*- import matplotlib.pyplot as plt import numpy as np import math from matplotlib import rc rc('font',**{'family':'serif'}) rc('text', usetex=True) rc('text.latex',unicode=True) rc('text.latex',preamble

我使用以下脚本使用matplotlib生成地物:

 # -*- coding: utf-8 -*-
import matplotlib.pyplot as plt
import numpy as np
import math

from matplotlib import rc
rc('font',**{'family':'serif'})
rc('text', usetex=True)
rc('text.latex',unicode=True)
rc('text.latex',preamble=r'\usepackage[utf8]{inputenc}')
rc('text.latex',preamble=r'\usepackage[russian]{babel}')

def figsize(wcm,hcm): plt.figure(figsize=(wcm/2.54,hcm/2.54))
figsize(13,9)

x = np.linspace(0,2*math.pi,100)
y = np.sin(x)
plt.plot(x,y,'-')
plt.xlabel(u"Ось абсцисс")
plt.show()
它工作正常,图形渲染正确。但当我试图将其保存为pdf时,会出现以下错误:

Traceback (most recent call last):
  File "C:\Path\rus pics\___test_rus.py", line 22, in <module>
    plt.savefig(u"c:/fig.pdf")
  File "C:\Python35\lib\site-packages\matplotlib\pyplot.py", line 688, in savefig
    res = fig.savefig(*args, **kwargs)
  File "C:\Python35\lib\site-packages\matplotlib\figure.py", line 1565, in savefig
    self.canvas.print_figure(*args, **kwargs)
  File "C:\Python35\lib\site-packages\matplotlib\backend_bases.py", line 2232, in print_figure
    **kwargs)
  File "C:\Python35\lib\site-packages\matplotlib\backends\backend_pdf.py", line 2536, in print_pdf
    self.figure.draw(renderer)
  File "C:\Python35\lib\site-packages\matplotlib\artist.py", line 61, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "C:\Python35\lib\site-packages\matplotlib\figure.py", line 1159, in draw
    func(*args)
  File "C:\Python35\lib\site-packages\matplotlib\artist.py", line 61, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "C:\Python35\lib\site-packages\matplotlib\axes\_base.py", line 2324, in draw
    a.draw(renderer)
  File "C:\Python35\lib\site-packages\matplotlib\artist.py", line 61, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "C:\Python35\lib\site-packages\matplotlib\axis.py", line 1120, in draw
    self.label.draw(renderer)
  File "C:\Python35\lib\site-packages\matplotlib\artist.py", line 61, in draw_wrapper
    draw(artist, renderer, *args, **kwargs)
  File "C:\Python35\lib\site-packages\matplotlib\text.py", line 792, in draw
    mtext=mtext)
  File "C:\Python35\lib\site-packages\matplotlib\backends\backend_pdf.py", line 1866, in draw_tex
    psfont = self.tex_font_mapping(dvifont.texname)
  File "C:\Python35\lib\site-packages\matplotlib\backends\backend_pdf.py", line 1568, in tex_font_mapping
    return self.tex_font_map[texfont]
  File "C:\Python35\lib\site-packages\matplotlib\dviread.py", line 701, in __getitem__
    result = self._font[texname.decode('ascii')]
AttributeError: 'str' object has no attribute 'decode'
回溯(最近一次呼叫最后一次):
文件“C:\Path\rus pics\\uuuuuu test\u rus.py”,第22行,在
plt.savefig(u“c:/fig.pdf”)
savefig中第688行的文件“C:\Python35\lib\site packages\matplotlib\pyplot.py”
res=图savefig(*args,**kwargs)
savefig中的文件“C:\Python35\lib\site packages\matplotlib\figure.py”,第1565行
self.canvas.print_图(*args,**kwargs)
文件“C:\Python35\lib\site packages\matplotlib\backend\u base.py”,第2232行,如图所示
**kwargs)
文件“C:\Python35\lib\site packages\matplotlib\backends\backend\u pdf.py”,第2536行,以print\u pdf格式
self.figure.draw(渲染器)
文件“C:\Python35\lib\site packages\matplotlib\artist.py”,第61行,在draw\u包装中
绘制(艺术家、渲染器、*args、**kwargs)
文件“C:\Python35\lib\site packages\matplotlib\figure.py”,第1159行,在绘图中
func(*args)
文件“C:\Python35\lib\site packages\matplotlib\artist.py”,第61行,在draw\u包装中
绘制(艺术家、渲染器、*args、**kwargs)
文件“C:\Python35\lib\site packages\matplotlib\axes\\u base.py”,第2324行,在绘图中
a、 绘制(渲染器)
文件“C:\Python35\lib\site packages\matplotlib\artist.py”,第61行,在draw\u包装中
绘制(艺术家、渲染器、*args、**kwargs)
文件“C:\Python35\lib\site packages\matplotlib\axis.py”,第1120行,在绘图中
self.label.draw(渲染器)
文件“C:\Python35\lib\site packages\matplotlib\artist.py”,第61行,在draw\u包装中
绘制(艺术家、渲染器、*args、**kwargs)
文件“C:\Python35\lib\site packages\matplotlib\text.py”,第792行,在绘图中
多行文字=多行文字)
文件“C:\Python35\lib\site packages\matplotlib\backends\backend\u pdf.py”,第1866行,绘图文本
psfont=self.tex\u font\u映射(dvifont.texname)
文件“C:\Python35\lib\site packages\matplotlib\backends\backend\u pdf.py”,第1568行,采用tex\u字体\u映射
返回self.tex\u font\u映射[texfont]
文件“C:\Python35\lib\site packages\matplotlib\dviread.py”,第701行,在\uu getitem中__
结果=self.\u字体[texname.decode('ascii')]
AttributeError:“str”对象没有属性“decode”
只有在标签中使用西里尔字母时才会出现错误。

使用被证明是一个很好的解决方法。它有自己的问题(例如,Xeletex在带有
fill\u的图形上失败,介于
之间),但它仍然允许在标签中获取西里尔字母

# -*- coding: utf-8 -*-
from __future__ import (absolute_import, division, print_function, unicode_literals)

import matplotlib as mpl
mpl.use("pgf")
pgf_with_custom_preamble = {
    "font.family": "serif", # use serif/main font for text elements
    "text.usetex": True,    # use inline math for ticks
    "pgf.rcfonts": False,   # don't setup fonts from rc parameters
    "pgf.preamble": [
         "\\usepackage{units}",         # load additional packages
         "\\usepackage{metalogo}",
         "\\usepackage{unicode-math}",  # unicode math setup
         r"\setmathfont{xits-math.otf}",
         r"\setmainfont{DejaVu Serif}", # serif font via preamble
         ]
}
mpl.rcParams.update(pgf_with_custom_preamble)
import matplotlib.pyplot as plt
import numpy as np
import math

def figsize(wcm,hcm): plt.figure(figsize=(wcm/2.54,hcm/2.54))
figsize(13,9)

x = np.linspace(0,2*math.pi,100)
y = np.sin(x)
plt.plot(x,y,'-')
plt.xlabel(u"Ось абсцисс")
#plt.show()

plt.savefig(u"d:/fig.pdf")

通过安装缺少larm1200字体的cm super软件包解决了此问题。Matplotlib开发人员,感谢您的帮助

请使用
**{'family':'seif'}显示整个回溯消息
似乎有点傻,因为您可以指定关键字,就像:`rc('font',family='serif')将完整的回溯报告作为错误添加