![fa3b0f89f2609c2ae131f7a13c78c6ba.png](https://img-blog.csdnimg.cn/img_convert/fa3b0f89f2609c2ae131f7a13c78c6ba.png)
matplotlib路径上那个美丽的坑
matplotlib 路上最大的坑!
本人是非计算专业的计算机爱好者,计算机方面的知识和技能都来自于自学。在学习的路上跌落过无数的坑。
三年前开始自学Python语言,很快被它的简洁、明了(近自然语言的语法)征服。Python庞大的第三方库资源又让它几乎无所不能!
我最初学习它的目的是为了做数据分析,因此,必须掌握熟练、高效的数据可视化方法。matplotlib作为Python语言的可视化标准库,当然首先就学它。
matplotlib的对象及其参数设置极其繁杂,导致学习曲线非常陡峭。matploblib为了快速绘图的目的,又提供了三种绘图模式:
- pyplot,函数式绘图接口;
- pylab,仿matlab模式;这个目前已弃用;
- 面向对象绘图。
pyplot提供了一系列绘图函数接口,可以用较少的代码,快速绘制一些常见、简单的图形,所以各种matplotlib教程、书籍无一例外地从pyplot开始,并把函数式绘图作为重点介绍。
基于我的痛苦的自学经历,认为这是为初学者挖了一个更大的坑,具体表现在,迷恋于pyplot函数式绘图的人,都不同程度地遇到如下问题:
- 参照示例绘制能很快绘制出一些简单的图,没有了示例就不知道从哪里下手;
- 示例不可能完全符合要求,就不知道如何添加或修改了;
- 这时就到一些群、贴吧...里留言,求助,这次别人帮助解决了;
- 下次遇到一个相似,但稍有变化的问题时,又不知道怎么解决了;
永远处在知其然而不知其所以然的状态,在痛苦中使用matplotlib做数据可视化工作,一部分人最后就绝望了,就在想:有没有更简单好用的Python数据可视化工具呢?
有人就拿python和R比较,认为R的成功很大一部分得益于有一个ggplot2。
我就跌落过这样的坑!
pyplot 歧途
从pyplot函数开始绘图,确实很简单:
import matplotlib.pyplot as pltplt.plot([1, 2, 3, 4])plt.ylabel('some numbers')plt.show()
![7f4863d48c6330425752c67b06e21e49.png](https://img-blog.csdnimg.cn/img_convert/7f4863d48c6330425752c67b06e21e49.png)
确实很简单,4行代码就绘制出了一张线性关系图,并且看起来还可以!
这能很快吸引初学者的眼球,但也给他们挖了一个大大的坑:
- 当想让这张图形更加专业美观时,比如,给坐标轴区域添加一点淡淡的背景色时;
- 想修改轴上的刻度数字格式时,如显示为整数;
- 想修改那根斜线的颜色、粗度时
- .....
- 想统一篇论文中的多幅图的格式时。
他们就会就痛苦地去找示例,照着套,当示例代码很长时,因为没有理解matplotlib的逻辑框架,不知道哪行代码是需要的.....
这种知其然不知其所以然,永远只能照猫画虎的状态是痛苦的,时间一长继续学习下去的兴趣就消耗殆尽!
在一个交流群中,看到有人问类似这样的问题,如:如何把下图y轴设置为不是科学计数法。
![2e22137c6f43235b243a3370a6421856.png](https://img-blog.csdnimg.cn/img_convert/2e22137c6f43235b243a3370a6421856.png)
有位热心人帮他改过来了,他又接着问:
![e6d502377430c437943e3d6f1d2ff3c8.png](https://img-blog.csdnimg.cn/img_convert/e6d502377430c437943e3d6f1d2ff3c8.png)
我相信一点,这位网友已走上了matplotlib的歧途,如果继续这样学习下去,必然也会跌落那个坑中,最后痛苦地放弃matplotlib。
这个坑就是从“pyplot函数式绘图”进入matplotlib。
为什么对matplotlib都是负面评价?
在我看来,新用户学习matplotlib之所以会面临一定的挑战,主要有以下几个原因。
首先,matplotlib有两种接口。第一种是基于MATLAB并使用基于状态的接口,即pyplot绘图。第二种是面向对象的接口。两种接口引起混淆的原因在于,在网络上搜索示例代码时,新用户对那些看起来有些相似但不一样的问题,面对多个解决方案会感到困惑。
其次,matplotlib一开始就追求对图形每个细节的完全自主控制,所以matplotlib中的对象很多,并且经常交叉引用,错综复杂。同一个对象的一些属性经常可以在不同层次设置,让初学者无所适从。
最后,除了官方文档,系统性教材缺乏。可见的一些书籍、教程都从pyplot快速绘图开始,很少深入剖析matplotlib的框架逻辑,新用户长时间处在知期然不知其所以然的状态,无法达到自由操控matplotlib的境界。最后得出一个结论,matplotlib太难了,有些图更本就绘不出来。实际是matplotlib能绘出你相得到的绝大多数图形。
绕过那个最大的坑
要避免落入matplotlib学习路径上那个最大的坑的关键点就是:
- 清晰理解matplotlib的逻辑框架;
- 从面向对象绘图开始。
做到这两点,pyplot函数式绘图会自然习得!
关注头条号“Python草堂”,将带你一步一步进入matplotlib的自由殿堂。
![b2e4dcf4d8c779a82c7f1fb689a86c26.png](https://img-blog.csdnimg.cn/img_convert/b2e4dcf4d8c779a82c7f1fb689a86c26.png)
下一篇:matplotlib逻辑框架剖析浅析