文章目录
python拥有强大的matplotlib可视化库,内容过于丰富,恕不能一一整理。
这篇推文里cd我整理三个比较基础的问题:
- python可视化中pylab库与pyplot的关系
- 函数式绘图与对象式绘图(主要)
- Axes对象与subplot对象的关系
1. python可视化中pylab库与pyplot的关系
用python绘图时,经常会看到一些绘图案例。这些例子中是导入绘图库大约有这三种:
import pylab as plt
import matplotlib.pylab as plt
import matplotlib.pyplot as plt
这些例子嘛后面就都用plt.XXX
一顿操作,然后运行起来么也都丝般顺滑(cd我因为懒用的都是第一种),所以,这三种方式到底有什么区别?
对于1和2,其实没差别,因为我翻看了一下pylab库的源码,显示如下:
from matplotlib.pylab import *
import matplotlib.pylab
__doc__ = matplotlib.pylab.__doc__
那么对于pylab与pyplot的关系呢?cd我查找一波,发现解答:
pyplot:“方便快速绘图,matplotlib通过pyplot模块提供了一套和MATLAB类似的绘图API,将众多绘图对象所构成的复杂结构隐藏在这套API内部。”
pylab:“pylab包括了许多NumPy和pyplot模块中常用的函数,方便用户快速进行计算和绘图,十分适合在IPython交互式环境中使用。”
综上:三种方式关系为1=2>3(这个大于号不是很严谨,但对于一般操作而言均成立)。意思就是说pylab结合了pyplot和numpy,对交互式使用来说比较方便,既可以画图又可以进行简单的计算。但是,对于一个项目来说,建议分别倒入使用,就是分别导入matplotlib.pyplot
和numpy
。
附matplotlib的资料:
http://matplotlib.org/Matplotlib.pdf (Matplotlib.pdf)
2. 函数式绘图与对象式绘图(主要)
2.1 函数式作图
大家都知道MATLAB语言是面向过程的。在可视化过程中MATLAB利用函数的调用,轻松的利用各种函数命令来绘制直线,然后再用一系列其他函数调整结果。Python的matplotlib库中也提供这样的绘图接口,直接调用matplotlib.pyplot或者pylab就可以实现。
函数式调用很方便。但是matplotlib本质上还是构建对象来构建图像。函数式编程将构建对象的过程封装在函数中,从而让我们觉得很方便。
对于单一图像绘制或者简单效果的实现,这种函数式作图是一种值得推荐的操作方式。
2.2 对象式作图
但是其实很多时候,使用函数式作图时,我们非明白真正作图的实现过程,如果希望能够更好理解python可视化,对象式作图将是一个更好的习惯。
首先我们需要了解一下图像的构成。下面以一张‘五脏俱全’的图像为例。
上图是我特地截图保留下来的,是为了说明,所有axes/subplot都是画在figure上的。
另外如下图:
就是说,figure1是由上图所示的(1-figure/画布)和(2-axes/subplot)构成。我们所有所绘制的图形都是在1-画布上实现的。需要注意的是,我们平时用savefig()
保存