matplotlib是一个用来画图的python的包,他是由John D. Hunter发起的。mtplotlib使用numpy进行数组运算,并调用一系列其他的Python库来实现硬件交互,其核心是一套由对象构成的绘图API。
最近被人问到一些matplotlib的问题,但对答案又一知半解,所以在这里希望加深一下对matplotlib的理解以及使用
简单的示例
这里我们使用一个简单的示例来了解matplotlib的使用
import numpy as np
import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)
plt.plot(X,C)
plt.plot(X,S)
plt.show()
代码没问题,结果没问题,但是对于我这个一直习惯于python的面向对象写法的菜鸟,这个代码有些理解不能了!!!将pyplot
导入为plt
之后,这个代码一直是在进行函数式操作,又或者是plt是一个类???
关于没有图形终端的解决方案
当你碰到QT之类的问题时,请尝试下面的方案:Generate images without having a window appear
The easiest way to do this is use a non-interactive backend (see What is a backend?) such as Agg (for PNGs), PDF, SVG or PS. In your figure-generating script, just call the matplotlib.use() directive before importing pylab or pyplot:
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
plt.plot([1,2,3])
plt.savefig('myfig')
一个面向对象的例子
对于用惯了Python的同学,上面的看似面向过程的例子总归很别扭,下面是一个面向对象的例子:
import numpy as np
import matplotlib as mpl
mpl.use('Agg')
import matplotlib.pyplot as plt
fig = plt.figure()
ax = fig.add_subplot()
X = np.linspace(-np.pi, np.pi, 256,endpoint=True)
C,S = np.cos(X), np.sin(X)
ax.plot(X,C)
ax.plot(X,S)
plt.show()
暂时所看到的就这么多了,这里的ax
是matplotlib.axes._subplots.AxesSubplot
类型的对象。虽然最后还是显式的调用plt.show()
或者plt.savefig()
这两个函数来保存对象(对于matplotlib这样的用法实在有点接受不能)。