matplotlib 生成 eps 插入到 tex


matplotlib 生成 eps,就可以插入到 tex 中,而且是矢量图,放大不失真。

而且因为图中的元素都是嵌入到 pdf 中,所以图中的文字也可以选中及复制。

注意 matplotlib 的 backend 要选择 Agg ,用 TkAgg 作为 backend 只能生成一张空白图片。

testeps.py

 import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
x=range(100)
y=[i**2 for i in x]
plt.plot(x,y,label='x**2')
plt.legend(frameon=False)
plt.xlabel('x')
plt.ylabel('y')
plt.title('x**2')
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。

搞定中文


 #encoding=utf-8
import matplotlib
matplotlib.use('Agg')
import matplotlib.font_manager as fm
myfont = fm.FontProperties(fname='/usr/share/fonts/WinFonts/simhei.ttf')
import matplotlib.pyplot as plt
plt.clf()
x=range(100)
y=[i**2 for i in x]
plt.plot(x,y)
plt.legend([u'x**2图例'],prop=myfont,frameon=False)
plt.xlabel('x')
plt.ylabel('y')
plt.title(u'x**2的图像',fontproperties=myfont)
plt.savefig('testeps_pdf.pdf',format='pdf')

(参考 wesleyhsiung 在 matplotlib图例中文乱码? 下的 回答 )

 #encoding=utf-8
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号 plt.clf()
x=range(100)
y=[i**2 for i in x]
plt.plot(x,y)
plt.legend([u'x**2图例'],frameon=False)
plt.xlabel('x')
plt.ylabel('y')
plt.title(u'x**2的图像')
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

matplotlib 生成 eps 插入到 tex的更多相关文章

  1. 生成eps图形

    (1) matlab可直接将生成图片保存为eps格式. print -fhandle -rresolution -dfileformat filename 例子:set(gcf,'paperposit ...

  2. 生成.eps文件方法

    生成.eps文件方法 背景: 要写论文了,图像的分辨率是一大痛点 方法一: 两步生成.eps文件 用visio 制作图形,保存为pdf格式: 直接用adobe acrobat 打开pdf,然后保存为. ...

  3. 快速将一个表的数据生成SQL插入语句

    将一个表中的数据生成SQL插入语句,方便系统快速初始化,在数据库中执行创建以下过程就可以了. ) Drop Procedure GenerateData go CREATE PROCEDURE Gen ...

  4. Springboot接口简单实现生成MySQL插入语句

    Springboot接口简单实现调用接口生成MySQL插入语句 在实际测试中,有这样一个需求场景,比如:在性能压力测试中,可能需要我们事先插入数据库中一些相关联的数据. 我们在实际测试中,遇到问题,需 ...

  5. 生成大量插入语句,并将语句写入txt文件中

    import java.io.*; /** * Created by czz on 2019/9/23. */ public class TTest { /** * 生成大量插入语句,并将语句写入tx ...

  6. 基于爬取百合网的数据,用matplotlib生成图表

    爬取百合网的数据链接:http://www.cnblogs.com/YuWeiXiF/p/8439552.html 总共爬了22779条数据.第一次接触matplotlib库,以下代码参考了matpl ...

  7. Python3+pdfminer+jieba+wordcloud+matplotlib生成词云(以深圳十三五规划纲要为例)

    一.各库功能说明 pdfminer----用于读取pdf文件的内容,python3安装pdfminer3k jieba----用于中文分词 wordcloud----用于生成词云 matplotlib ...

  8. Locust 测试结果通过Matplotlib生成趋势图

    目的: 相信大家对于使用Loadrunner测试后的结果分析详细程度还是有比较深刻的感受的,每个请求,每个事务点等都会有各自的趋势指标,在同一张图标中展示.如下图: 而Locust自身提供的chart ...

  9. python 基于 wordcloud + jieba + matplotlib 生成词云

    词云 词云是啥?词云突出一个数据可视化,酷炫.以前以为很复杂,不想python已经有成熟的工具来做词云.而我们要做的就是准备关键词数据,挑一款字体,挑一张模板图片,非常非常无脑.准备好了吗,快跟我一起 ...

随机推荐

  1. kerberos环境下spark消费kafka写入到Hbase

    一.准备环境: 创建Kafka Topic和HBase表 1. 在kerberos环境下创建Kafka Topic 1.1 因为kafka默认使用的协议为PLAINTEXT,在kerberos环境下需 ...

  2. (win10 docker desktop) docker build 时 alpine 无法安装软件问题的解决

    使用 alpine 作为 docker 基础镜像时,运行 apk add ..... 遇到如下错误: WARNING: Ignoring http://dl-cdn.alpinelinux.org/a ...

  3. SpringCloud-Gateway

    在微服务架构中,我们会遇到这样的问题:1.在调用微服务时,需要鉴权,微服务不能任意给外部调用.但是,多个微服务如果都需要同一套鉴权规则,明显会产生冗余,如果鉴权方法需要修改,则需要改动多个地方.2.在 ...

  4. flex.css

    flex.css:https://codepen.io/webstermobile/pen/apXEER/

  5. 菜鸟学python之程序初体验

    作业来源:https://edu.cnblogs.com/campus/gzcc/GZCC-16SE1/homework/2684 1.字符串操作: 解析身份证号:生日.性别.出生地等. def id ...

  6. Net包管理NuGet(4)打包nuget包的进阶用法

    nuget包不止可以放进dll,还可以引用其他包,创建项目文件及替换配置文件 引用的时候同时引用依赖项假设引用某个dll需要依赖其他的dll如Zeta.Core.dll需要引用ZETA.Seriali ...

  7. [C++项目]2048控制台游戏

    #include <iostream> #include <windows.h> #include <ctime> using namespace std; ; ; ...

  8. vue实现懒加载

  9. Vue中的状态管理器 - Vuex

    我们知道vue是组件式开发的,当你的项目越来越大后,每个组件背后的数据也会变得越来越难以理顺, 这个时候你就可以考虑使用vuex了. 备注: 官方建议小项目不要使用,引入vuex会带来新的概念和模式, ...

  10. 利用ir.sequence自动生成序列号

    利用ir.sequence自动生成序列号 什么是序列号 可以这么理解,我有一个产品序号,编码的前缀是SOP,后缀是0001~9999的序号,没生成一个产品就自动流水加一,序列号不会重复,odoo中的i ...