1 matplot入门指南¶
matplotlib是Python科学计算中使用最多的一个可视化库,功能丰富,提供了非常多的可视化方案,基本能够满足各种场景下的数据可视化需求。但功能丰富从另一方面来说也意味着概念、方法、参数繁多,让许多新手望而却步。
据我了解,大部分人在对matplotlib接触不深时都是边画图边百度,诸如这类的问题,我想大家都似曾相识:Python如何画散点图,matplotlib怎么将坐标轴标签旋转45度,怎么设置图例字体大小等等。无论针对哪一个问题,往往都有多种解决方法,搜索引擎这时候当然会很热情得将各种五花八门、看似合理、各不相同的解决方案推给我们,对于新手往往就迷失在这些纷杂的答案中,然后觉得matplotlib好复杂。matplotlib设计原则就是追求对每一个图表细节的完全控制,所以matplotlib源码中各种对象很多,甚至各对象间相互应用,错综复杂,对同一个对象的设置经常可以调用不同的方法来实现,这是matplotlib入门难的原因之一。
对于matplotlib入门阶段学习曲线陡峭,我认为还有一个更加重要的原因。无论是在各种出版书籍还是网络博客中,都少有资料对matplotlib进行深入的系统介绍,大多浅尝辄止。这些流于表层的资料对于如何用matplotlib作图没有进行深入的分析,大多只介绍如何调用pyplot模块中的方法进行作图。pyplot是matplotlib中提供的一个顶层模块,提供许多方法实现了快速、简便作图,几行代码就可以完成一幅图的创作,但是,这种方法作图却让新手对matplotlib图形的认识变得粗浅,也很难实现对图形的更加精细控制,底层定制能力有限,最终让新手对matplotlib咬牙切齿。这种方法就想吃快餐,快速方便,但是吃多了难免营养不良。
面对matplotlib入门阶段的这两个问题,怎么办呢?
matplotlib其实提供了两类接口实现作图。第一类基于状态的接口,就是上文中提到的pyplot进行作图,这类接口对matplotlib中更加底层的对象进行封装,以仿MATLAB作图风格的方式让作图更加简单方便。至于为什么叫基于状态,我的观点是pyplot所有作图动作都是默认在当前出于激活的元素上进行,要切换到其他元素作图,就要使另一元素激活。第二类接口是基于对象的接口,这种方法是使用买你想对象的方法来作图,认为图形中每一个元素都是一种对象,通过调用更加底层对象来实现作图。这种方法代码量更多,但是让用户对matplotlib图形的构成有了更深的认识,也让用户对图形的每一个元素有更强的掌控力。
所以,在使用matplotlib作图过程中,本文建议在学习阶段多使用基于对象的方法进行作图,只要掌握了基于对象的方法作图,后面使用pyplot作图自然水到渠成。本文后续大部分介绍也是基于这一种方法。