matplotlib-打印输出文本作为路径,不能通过Inkscape转换为LaTeX

matplotlib-打印输出文本作为路径,不能通过Inkscape转换为LaTeX,matplotlib,latex,vector-graphics,inkscape,Matplotlib,Latex,Vector Graphics,Inkscape,我有一个matplotlib绘图,我想将其保存为矢量图形格式,然后在LaTeX文档中使用 我通常从matplotlib保存它,用Inkscape打开它并将其保存为PDF+LaTeX(省略PDF中的文本并创建LaTeX文件)。 这也可以通过以下方式实现: inkscape -D -z --file=in.pdf --export-pdf=out.pdf --export-latex 但是,对于下面的绘图,文本实际上是一系列路径。每个字母都是独立的,导致Inkscape无法保存不同的tex文件

我有一个
matplotlib
绘图,我想将其保存为矢量图形格式,然后在LaTeX文档中使用

我通常从
matplotlib
保存它,用Inkscape打开它并将其保存为PDF+LaTeX(省略PDF中的文本并创建LaTeX文件)。 这也可以通过以下方式实现:

inkscape  -D -z --file=in.pdf --export-pdf=out.pdf --export-latex
但是,对于下面的绘图,文本实际上是一系列路径。每个字母都是独立的,导致Inkscape无法保存不同的
tex
文件

为什么在下面的代码中文本不是呈现为文本而是呈现为路径?请注意,使用
usetex=True
并没有什么区别

谢谢

from scipy.stats import lognorm
from matplotlib import rc

#rc('text', usetex=True)
rc('font', family='Times New Roman')
rc('font', size='20.0')

mu    = 1.7
sigma = 1.1
n, bins, patches = plt.hist(data, bins=10000, facecolor='k', edgecolor='k', 
                            normed=True, alpha=0.3, histtype='stepfilled',
                            label='\\noindent Empirical data')
y = lognorm.pdf( bins, sigma, scale=np.exp(mu))
plt.xlim( (0,50) )
plt.plot(bins, y, '-', color='k', linewidth=2, label='\\noindent Lognormal curve')
plt.ylim( (0, .15) )
plt.xlabel('my x label')
plt.ylabel('my y label')

plt.grid()
plt.legend()
plt.savefig(os.path.expanduser('~/myfile.svg'))

我遇到了同样的问题并解决了它

中的matplotlib文档声明参数
svg.fonttype
的默认值为
'path'
,这意味着在导出为svg格式时,字符将转换为路径

我只需要在脚本中添加以下行:

matplotlib.rcParams['svg.fonttype'] = 'none'

通过这种方式,所有字符都被正确嵌入,我现在可以在Inkscape中编辑文本,并将我的图形导出为pdf+Latex,即pdf文件和pdf_-tex文件,我将其包含在我的
tex
文件中。

另一个更持久的选项是

svg.fonttype : none
在matplotlibrc中
(~/.config/matplotlib/matplotlibrc,例如)

我不知道为什么它在SVG输出中使用路径而不是带有字体引用的文本,但是您不能使用PDF输出来代替SVG吗?这是一种矢量格式,并且嵌入了字体。PDF输出也有同样的问题!我得到了预期的输出-PDF和引用的字体和文本流。例如,尝试使用LibreOffice Draw打开文件,您应该能够看到文本框。同样的问题,即使使用LibreOffice Draw,每个字母都有自己的框。请允许我澄清,问题不在于是否有正确的字体(我的输出实际上有正确的字体),而是将每个字母绘制为路径而不是文本,从而使标签无法识别为文本。当然,对于SVG,我也会获得路径而不是文本,但对于PDF,我会获得正确的文本:LO Draw中的PDF编辑受到限制,可以看出。我在Windows上使用Python2.7和MPL1.2.0。也许你应该试着暂时重置
matplotlibrc
你是我的英雄,每周帮我节省几个小时的工作时间。谢谢你,伙计!:)奇怪的是,这对我的一些标签有效,但对其他标签无效。例如,它不适用于我在子地块轴上通过“annotate”或“set_yticks”添加的文本,但适用于在同一子地块轴上通过“set_ylabel”添加的文本。对于PDF导出,这就做到了:plt.rcParams['PDF.use14corefonts']=True