zoukankan      html  css  js  c++  java
  • matplotlib 生成 eps 插入到 tex

    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}
    	itle{x**2}
    author{maxuewei}
    date{}
    
    egin{document}
    maketitle
    
    egin{center}
    $$
    y=x^2
    $$
    即
    $$
    y=x*x
    $$
    图像如下\
    end{center}
    egin{figure}[htbp]
        centeringincludegraphics[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,图像部分的文字无法选中,无法像上面一样可以选中及复制。

    其余图形 


    方法 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 即为透明。

    其他


     

    使用 graphviz/dot  语言画图,可方便地画出树、流程图等。

    使用 D3.js、Chart.js 等 JavaScript 库画图。见 Javascript chart library

    使用 TikZ、Metapost 等。

    使用 draw.iogliffylucidchartprocesson 等在线网站。

    使用 gephi 等绘制网络。

    What GUI applications are there to assist in generating graphics for TeX?

    Which open source software is best for network data analysis?

    END

    2017.08.21 19:35

  • 相关阅读:
    [LeetCode] Minimum Depth of Binary Tree 二叉树最小深度
    [LeetCode] Intersection of Two Linked Lists 两链表是否相交
    [LeetCode] Permutations II 排列
    [LeetCode] Maximum Product Subarray 连续数列最大积
    Ncut matlab 代码bug 修复
    [LeetCode] Jump Game II 贪心
    【poj2182】【poj2828】树状数组/线段树经典模型:逆序查找-空位插入法
    【hdu1828/poj1177】线段树求矩形周长并
    【hdu1255】线段树求矩形面积交
    【hdu1542】线段树求矩形面积并
  • 原文地址:https://www.cnblogs.com/maxuewei2/p/7406259.html
Copyright © 2011-2022 走看看