主图的各个部分
现在,让我们深入看看Matplotlib的主图的每一部分
主图(Figure)
就是整张绘图区域。主图和所有的从属的子坐标轴区域有联系,少数的像坐标轴区域的题目,图例等等和画布。(不用过于担心画布,实际上是画布去完成绘图,但是对于调用函数的人来说,或多或少它是不可见的)。一个主图会包含一个或者多个坐标轴区域。
生成一个主图的最简单的方法是使用pyplot:
fig = plt.figure()# 生成一个没有坐标轴的主图
fig, ax = plt.subplots()# 返回两个值,第一个是主图,第二个是一套坐标轴
fig, axs = plt.subplots(2,2)# 一个主图和四个坐标轴,按照2x2排列
把坐标轴和主图一起创建是很方便的,但是你也可以在创建主图之后在添加坐标轴区域,这个也允许你添加跟多的复杂的坐标轴属性。
坐标轴区域(Axes)
坐标轴区域就是绘图的区域,这是图像加数据的区域。一个主图可以包含多套坐标轴区域,但是一套坐标轴区域只能从属于一个主图。一个坐标轴区域包含两条或者三条坐标轴。坐标轴的限制(极限)会和数据相关,这个极限也可以通过axes.Axes.set_xlim()方法来控制,坐标轴的名字通过axes.Axes.set_title()控制,axes.Axes.set_label()可以控制坐标轴的标签。
坐标轴(axis)
也就是数值轴。坐标轴的属性关注的是设定图表的极限值和产生坐标轴的标志和坐标轴的名称。名称的位置取决于Locator对象,标签式的字符串会被Formatter格式化。Locator和Formatter会很好地控制标识的位置和标签。
艺术家对象(Artist)
基本的,所有你在主图上可以看到的东西都是一个艺术家对象(甚至是Figure对象,Axes对象和坐标轴axies对象)。这个包含了Text对象,Line2D对象,collection对象,Patch对象等。当主图被绘制出来后,所有的艺术家对象都会在画布上被画出来。大多数的艺术家对象都会被绑定在坐标轴区域对象上,不能共享,也不能移动。
给绘图函数输入参数的类型
所有的绘图函数的输入参数都是numpy的数组或者numpy的ma.masked_arrary(带掩码的numpy数组),类数组类型的像panda数组或者numpy的矩阵有可能会不支持。最好在画图之前先把它们转化为numpy数组。
面向对象的界面和绘画界面
就像上面提到的,使用Matplotlib有两个至关重要的点:
·明确地建立主图和坐标轴区域,对它们使用方法(就是面向对象的操作方法)
·依靠pyplot去自动建立和管理主图和坐标轴,使用pyplot函数去绘图
面向对象风格:
x = np.linspace(0,2, 100)
fig, ax = plt.subplots()# 建立Figure对象和Axes对象
ax.plot(x, x,label='linear')
ax.plot(x, x**2,label='quadratic')
ax.plot(x, x**3,label='cubic')
#由于都是使用ax,因此都是在同一个坐标轴区域绘图
ax.set_xlabel('xlabel')# 设置x轴的名称
ax.set_ylabel('ylabel')# 设置y轴名称
ax.set_title("SimplePlot")# 给坐标轴区域一个名字
ax.legend()#显示图例,如果没有这个,曲线的label不会显示
还有matplotlib风格(不使用对象):
x = np.linspace(0,2, 100)
plt.plot(x, x,label='linear')
plt.plot(x, x**2,label='quadratic')
plt.plot(x, x**3,label='cubic')
plt.xlabel('xlabel')
plt.ylabel('ylabel')
plt.title("SimplePlot")
plt.legend()
事实上还有第三种绘图方法,在你把Matplotlib嵌入到一个GUI应用程序里面的时候,它会完全放弃pyplot,甚至也不需要figure对象的创建。但是我们在这里不讨论;
在交互式的平台,比如jupyter
notebook,我们推荐使用pyplot风格,但是在大型工程里面我们推荐使用面向对象风格。
后端
什么是后端?
很多在网站上和邮寄列表的文档会涉及到后端这个词,很多新手会对这个感到疑惑。matplotlib注重于很多不同的使用情况,也注重对输出的格式化。很多人在python shell上和matplotlib交互,在他们输入命令的时候会让绘图窗口弹出来。很多人使用jupyter nodebook并且使用内联的绘图方式来进行快速的数据分析。还有一些人把matplotlib嵌入到用户接触式的应用中,比如wxpython,pygtk去建立丰富的应用。一些人在批量的脚本中使用matplotlib,通过数字化仿真来生成图片。还有一些人运行网络应用服务去动态地服务于绘图。
为了支持这些不同的用途,matplotlib定位了不同的输出,每一个这种能力就叫做一种后端。前端就是用户面对的代码。相反后端在屏幕后把图片画出来。后端分成接触式后端和非接触式后端。
选择(配置)一个后端
有三种配置后端的方式:
未完。。。