Matplotlib可以非常方便的将数据处理和作图融为一体,最重要的其对数据可视化过程中图片的各种属性都可以灵活的控制。 其实可以这么说:只要你能想到的,用mpl都可以做出来!(肯定有人不服,服不服随便你,谁用谁知道)。 但是用mpl做过图的同学肯定遇到过这样一个头疼的问题,在保存图片的时候,边界上总有一些空白,这是我们不想要的。 在这篇文章里面我将介绍mpl几种不为常人所注意的几个技巧。*绝对难得的干货*
切除空白边界的方法有很多种,主要分为两类,一类是前处理;一类是后处理。 所谓前处理就是使用一些绘图控制命令在绘图的过程中一步到位,将空白边界切掉。 而后处理指的是使用一些工具(比如AI)将保存出来的图片进行后期编辑,把空白边界切掉。 一般的使用某些图片编辑软件进行后处理肯定显得很麻烦,比如当你更新图片后,又得重新编辑一遍,又得重新切边。 这种方式显然不优雅,我们在做科研的过程中一定得珍惜生命,不要在不必要的环节浪费青春。 Matplotlib提供了一些绘图控制命令可以进行前处理,我还会介绍一种更方便的后处理命令 pdfcrop 而不是用一些可视化的软件进行。
前处理
Matplotlib有很多函数或者参数进行画布的重新布局或重新设计大小。 比如 tight_layout(), subplots_adjust() 函数和 savefig 函数中的 bbox_inches 参数等。 下面介绍我经过长期的实践总结出来的几种常用的有效的前处理方式。
tight_layout
tight_layout 函数是用于自动布局画布和画布上的图形元素的, 可以通过里面的参数让整个画布更紧凑一些。 虽然这个函数有好几个参数: pad, h_pad, w_pad, rect , 但是其功能有限,甚至不好操作。 推荐一般直接用 plt.tight_layout() 或者 plt.tight_layout(pad=0.05) ,如果对图片布局或者边界空白无太多要求的情况下,这个就够了。
如果前面对坐标轴设置了比例关系: ax.axis('scaled') ,则慎用这个自动布局函数! 否则会破坏坐标系的比例关系。这种情况下一般用于纵横轴表示长度或者空间坐标的情况,因为这种情况纵横坐标的尺度比应该是1。 其他情况一般不