用matplotlib.plot绘制出符合论文要求的高质量图像

Python& AI 2019-04-10 588 次浏览 0 条评论

Jupyter notebook独特的笔记式编程方式让它成为最受学术界欢迎的交互式笔记本,而不管你是AI工程师还是数据挖掘师,一定会有制作大量图表的需要,尤其是发文章时,一张直观清晰的图标能让你的论文增色不少,Python众多绘图库中的标杆--matplotlib,它的强大不用我多说,但有时你一通帅气的操作之后,等着一张漂亮的图像加到你的文章中,你却看到了这样的情景:

整个图像仿佛打上了一层薄码,尤其是坐标轴的位置,几乎都看不清数字,这常常是因为使用了默认的图像参数。你可以通过设置图片大小和dpi解决这个问题:

fig = plt.figure(figsize=(weight, high), dpi=dpi)

其中:

  • figsize 设置图形的大小,weight 为图形的宽, high 为图形的高,单位为英寸
  • dpi 为设置图形每英寸的点数

比如你可以设置一张1200*800的图像为12英寸宽,8英寸高,dpi=100,也可以设置6英寸宽,4英寸宽,dpi=200,但是它们生成的图象是有区别的

12x8,dpi=100

8x6,dpi=200

很容易看出,仅改变图像的dpi,其中的元素大小并不会变,但是dpi越高,图像越清晰,改变图像的大小则会影响元素的大小,我们可以为了获得一张高清晰的图片而将dpi设置为300甚至更高。

其实要获得锐利清晰的图像还有其他的方法,比如矢量图。

在整个文档的最开头加入jupyter魔法代码

%matplotlib inline
%config InlineBackend.figure_format = 'svg'

等价于

get_ipython().run_line_magic('matplotlib', 'inline')
get_ipython().run_line_magic('config', "InlineBackend.figure_format = 'svg'")

然后查看图像,下面是局部放大的效果:

锐利,清晰,这才是上得了台面的高清无码大图。

其他图表的演示:

矢量图的显示效果远超传统位图,以矢量形式保存的时候也很简单

可以保存为pdf

plt.savefig('tmp.pdf', bbox_inches='tight')

可以保存为svg:

plt.savefig('tmp.svg', format='svg')

由于svg 是由XML格式定义图像的,没有安装特定图像查看器时需要用浏览器打开,可以使用inkscape等工具批量转换为emf格式,方便使用。

附送一个在线转换工具

微信扫一扫,分享到朋友圈

用matplotlib.plot绘制出符合论文要求的高质量图像
梓沨

站长 INTP,生物搬砖工

Leave a Reply

Your email address will not be published.