最近在用matplotlib作图,应用到ppt上是时候,总是不方便,有各种问题,在网上搜寻了一番,为自己总结一番。
matplotlib输出图片
输出格式
支持输出的格式有eps, jpeg, jpg, pdf, pgf, png, ps, raw, rgba, svg, svgz, tif, tiff。
输出方式
直接保存
通过作图导入的import matplotlib.pyplot as plt模块,我们在使用plt.show()方法查看图片时,右下角有保存图标,直接点击保存图标,填写图片名称,选择图片格式和位置,保存即可。
代码保存
1 | import matplotlib.pyplot as plt |
通过plt.savefig()方法,选择格式,填写位置和名称,运行即可。
应用ppt
图片放在ppt上展示的时候,不太清晰,就想选择矢量图。matplotlib输出的eps, svg, pdf等都有矢量效果,但能让ppt支持的只有一个eps,可惜eps格式ppt现在也有问题,导入进去不显示图片,我在网上找到了这篇文章I can no longer insert EPS graphics into PowerPoint来解决,但我试了没成功,有兴趣的可以点开,按照里面的方法试试。
但是ppt对emf支持效果还不错,可以通过Inkscape[1]软件转换svg格式为emf格式。
Inkscape
命令
Inkscape可以支持命令行功能,所以可以直接在python中调用,也可以打开inkscape程序,手动把svg格式转为emf格式。下面简单的介绍几个用法和命令[2]。
inkscape [options] [filename ...]
options:1
2
3
4
5
6
7
8
9
10
11
12-?, --help
--usage
-V, --version
-f, --file=FILENAME
-e, --export-png=FILENAME
-P, --export-ps=FILENAME
-E, --export-eps=FILENAME
-d, --export-dpi=DPI
-w, --export-width=WIDTH
-h, --export-height=HEIGHT
示例
1 | Microsoft Windows [版本 6.1.7601] |
inkscape如果没有文件具体路径,默认在当前路径下寻找文件。
需要注意的是,安装Inkscape不会自动加入到环境变量,所以要想在命令行中调用inkscape,必须自己手动将安装路径加入到环境变量,用管理员权限运行cmd
批处理文件
运用批处理文件,一样可以实现。用记事本保存下面代码,后缀名为.bat,放在待转换文件的文件夹内,双击运行。1
2
3
4
5
6@echo off
for %%i in (*.svg) do (
echo %%i
inkscape -f %%i -M %%~ni.emf
)
@echo Finished
python实现
主要问题是如何通过python实现命令行输入。
os.system()
1 | import os |
利用os.system()方法,直接输入代码,中间会打开cmd界面,不能获得返回值。
subprocess.Popen()
1 | import subprocess |
subprocess.Popen()参数比较多,常用的也就两三个。shell=True不会打开cmd界面,stdout是输出缓存,用read或者print方法读出。universal_newlines=True表明子进程的stdout和stderr被视为文本对象,并且不管是unix的行结束符'/n',还是老mac格式的行结束符'/r',还是windows格式的行结束符'/r/n'都将被视为 '/n' 。
subprocess其他方法
subprocess.call()
1 | subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False) |
subprocess.check_call()
1 | subprocess.check_call(args, *, stdin=None, stdout=None, stderr=None, shell=False) |
subprocess.check_output()
1 | subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False) |
示例
1 | #!/usr/bin/env python3 |
因为不需要获得返回值,处理的只有一张图片,所以写的比较简单。经处理的图片,可以直接在ppt中使用,效果还行。
参考资料
[1] : Word中插入Python“生成”的矢量图
[2] : Python多进程(1)——subprocess与Popen()
[3] : python中的subprocess.Popen()使用