matplotlib 生成 eps 插入到 tex
matplotlib 生成 eps,就可以插入到 tex 中,而且是矢量图,放大不失真。
而且因为图中的元素都是嵌入到 pdf 中,所以图中的文字也可以选中及复制。
注意 matplotlib 的 backend 要选择 Agg ,用 TkAgg 作为 backend 只能生成一张空白图片。
testeps.py
1 import matplotlib 2 matplotlib.use('Agg') 3 import matplotlib.pyplot as plt 4 x=range(100) 5 y=[i**2 for i in x] 6 plt.plot(x,y,label='x**2') 7 plt.legend(frameon=False) 8 plt.xlabel('x') 9 plt.ylabel('y')10 plt.title('x**2')11 plt.savefig('testeps.eps',format='eps')
testeps.tex
\documentclass[12pt]{article}\usepackage{fontspec}\usepackage{graphicx}\setmainfont{SimHei}\title{x**2}\author{maxuewei}\date{}\begin{document}\maketitle\begin{center}$$y=x^2$$即$$y=x*x$$图像如下\\\end{center}\begin{figure}[htbp] \centering\includegraphics[width=320pt]{testeps.eps} %\caption{something}\label{fig:1}\end{figure}\end{document}
用xelatex编译,生成pdf。
搞定中文
1 #encoding=utf-8 2 import matplotlib 3 matplotlib.use('Agg') 4 import matplotlib.font_manager as fm 5 myfont = fm.FontProperties(fname='/usr/share/fonts/WinFonts/simhei.ttf') 6 import matplotlib.pyplot as plt 7 plt.clf() 8 x=range(100) 9 y=[i**2 for i in x]10 plt.plot(x,y)11 plt.legend([u'x**2图例'],prop=myfont,frameon=False)12 plt.xlabel('x')13 plt.ylabel('y')14 plt.title(u'x**2的图像',fontproperties=myfont)15 plt.savefig('testeps_pdf.pdf',format='pdf')
(参考 在 下的 )
或
1 #encoding=utf-8 2 import matplotlib 3 matplotlib.use('Agg') 4 import matplotlib.pyplot as plt 5 plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签 6 plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号 7 8 plt.clf() 9 x=range(100)10 y=[i**2 for i in x]11 plt.plot(x,y)12 plt.legend([u'x**2图例'],frameon=False)13 plt.xlabel('x')14 plt.ylabel('y')15 plt.title(u'x**2的图像')16 plt.savefig('testeps_pdf.pdf',format='pdf')
(参考 )
生成pdf
然后终端运行
pdf2ps testeps_pdf.pdf testeps.eps
将 pdf 转成 eps
然后就可以像上面一样编译tex了。
不过最终生成的pdf,图像部分的文字无法选中,无法像上面一样可以选中及复制。
其余图形
方法 1
使用 MS PowerPoint、WPS、Libre office、xfig、Dia、yEd、Inkscape、LatexDraw、Ipe、TikzEdt 等画图并导出 eps 或 pdf ,然后插入到 tex 。
方法如下:
使用 WPS 或 Libreoffice Draw 或 Libreoffice Impress 画好图之后,导出 pdf,然后使用 pdfcrop 或类似工具对pdf进行裁剪
pdfcrop --margins "5 5 5 5" ppt.pdf final.pdf
使用 yED 时要注意在 Text Rendering Policy 中选择 Vectorized Text 之外的选项。
方法 2
另一种不错的方法是使用 Dia 画图,然后导出 pgf 的 tex 代码,假如导出为 dia_export.tex,在主文档中 \include{dia_export} 就可以了。
因为在 Dia 中不支持数学公式,所以可以在用 Dia 画图时先敲入公式,再在导出的 dia_export.tex 中把它对 $ \ 等的转义去掉,再用 LaTex 编译就可以了。
如果需要在背景颜色不为白色的 PDF 中插入图的话,画图时可以在『文件-图表属性』下设置背景颜色为灰色,然后对于图中的元素『右键-属性』,设置『填充颜色』、『线条颜色』等,其中有一个『透明度』的选项可以设置为 0 即为透明。
其他
使用 语言画图,可方便地画出树、流程图等。
使用 D3.js、Chart.js 等 JavaScript 库画图。见 。
使用 TikZ、Metapost 等。
使用 、、、 等在线网站。
使用 gephi 等绘制网络。
END
2017.08.21 19:35