matplotlib 生成 eps 插入到 tex

时间:2021-05-13 06:41:59

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.iogliffylucidchartprocesson 等在线网站。

 

使用 gephi 等绘制网络。

 

END

2017.08.21 19:35