最近在用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()使用