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')
(参考 wesleyhsiung 在 matplotlib图例中文乱码? 下的 回答 )
或
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')
(参考 python matplotlib 中文显示参数设置 )
生成pdf
然后终端运行
pdf2ps testeps_pdf.pdf testeps.eps
将 pdf 转成 eps
然后就可以像上面一样编译tex了。
不过最终生成的pdf,图像部分的文字无法选中,无法像上面一样可以选中及复制。
其余图形
使用 MS PowerPoint、WPS、Libre office、xfig、Dia、yED、Inkscape 等画图并导出 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 之外的选项。
其他
使用 graphviz/dot 语言画图,可方便地画出树、流程图等。
使用 D3.js、Chart.js 等 JavaScript 库画图。见 Javascript chart library。
使用 TikZ、Metapost 等。
使用 draw.io、gliffy、lucidchart、processon 等在线网站。
使用 gephi 等绘制网络。
END
2017.08.21 19:35