002-绕过`matplotlib`路上那个最大的坑

绕过 matplotlib 路上那个最大的坑

matplotlib路径上那个美丽的坑

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 plt

plt.plot([1, 2, 3, 4])
plt.ylabel('some numbers')

plt.show()

在这里插入图片描述
确实很简单,4行代码就绘制出了一张线性关系图,并且看起来还可以!

这能很快吸引初学者的眼球,但也给他们挖了一个大大的坑:

  • 当想让这张图形更加专业美观时,比如,给坐标轴区域添加一点淡淡的背景色时;
  • 想修改轴上的刻度数字格式时,如显示为整数;
  • 想修改那根斜线的颜色、粗度时
  • 想统一篇论文中的多幅图的格式时。

他们就会就痛苦地去找示例,照着套,当示例代码很长时,因为没有理解matplotlib的逻辑框架,不知道哪行代码是需要的…

这种知其然不知其所以然,永远只能照猫画虎的状态是痛苦的,时间一长继续学习下去的兴趣就消耗殆尽!

在一个交流群中,看到有人问类似这样的问题,如:如何把下图y轴设置为不是科学计数法。
在这里插入图片描述
有位热心人帮他改过来了,他又接着问:
在这里插入图片描述
我相信一点,这位网友已走上了matplotlib的歧途,如果继续这样学习下去,必然也会跌落那个坑中,最后痛苦地放弃matplotlib。

这个坑就是从**“pyplot函数式绘图”**进入matplotlib。

学习 matplotlib 的挑战

在我看来,新用户学习matplotlib之所以会面临一定的挑战,主要有以下几个原因。

首先,matplotlib有两种接口。第一种是基于MATLAB并使用基于状态的接口,即pyplot绘图。第二种是面向对象的接口。两种接口引起混淆的原因在于,在网络上搜索示例代码时,新用户对那些看起来有些相似但不一样的问题,面对多个解决方案会感到困惑。

其次,matplotlib一开始就追求对图形每个细节的完全自主控制,所以matplotlib中的对象很多,并且经常交叉引用,错综复杂。同一个对象的一些属性经常可以在不同层次设置,让初学者无所适从。

最后,除了官方文档,系统性教材缺乏。可见的一些书籍、教程都从pyplot快速绘图开始,很少深入剖析matplotlib的框架逻辑,新用户长时间处在知期然不知其所以然的状态,无法达到自由操控matplotlib的境界。最后得出一个结论,matplotlib太难了,有些图更本就绘不出来。实际是matplotlib能绘出你相得到的绝大多数图形。

绕过那个最大的坑

要避免落入matplotlib学习路径上那个最大的坑的关键点就是:

  1. 清晰理解matplotlib的逻辑框架;
  2. 从面向对象绘图开始。

做到这两点,pyplot函数式绘图会自然习得!

(This End.)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python草堂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值