本文从介绍一下Figure类和Axes类,二者的区别,以及一些实例。
matplotlib.figure模块包含了Figure类。它是所有绘图元素的顶层容器。Figure对象是通过调用pyplot模块中的fig()函数来实例化的,如下所示。(简单来说,Figure就是给我们画图提供了一个画布,这个画布的参数我们可以通过Figure类进行调整和修改,画布弄好之后才方便在上面作图)
fig = plt.figure()
它有一下几个参数:
参数 | 解释 |
---|---|
figsize | (宽,高),是个元组,表示Figure的大小 |
dpi | 每英寸的点数,也就是分辨率 |
facecolor | 画布的颜色 |
edgecolor | 画布的边缘颜色 |
linewidth | 边缘的线宽 |
下面来具体的看一个实例:
from matplotlib import pyplot as plt
import numpy as np
import math
x = np.arange(0, math.pi*2, 0.05)
y = np.sin(x)
fig = plt.figure(figsize=(8,4),dpi=144,facecolor='r')
ax = fig.add_axes([0,0,0.7,0.7])
ax.plot(x,y)
ax.set_title("sine wave")
ax.set_xlabel('angle')
ax.set_ylabel('sine')
plt.show()
显示结果如下,我们可以看到,这个figure实际是画布的背景,我们画的图是在axes上画的。
Axes对象是图像中具有数据空间的区域。一个给定的图可以包含许多Axes,但一个给定的Axes对象只能在一个图中。通过调用add_axes()方法将轴对象添加到图形中。它返回axes对象,并在矩形[左,底,宽,高]的位置添加一个轴(效果见此处链接),其中所有的数量都是图形宽度和高度的分数,这里不过多介绍。
以下是axes类的成员函数,它们为绘图添加了不同的元素:
函数1:Legend:axes类的legend()方法为绘图图添加了一个图例。它需要三个参数:
ax.legend(handles, labels, loc)
其中label是一个字符串序列,并处理Line2D或Patch实例的序列。loc可以是一个字符串或一个整数,指定图例的位置。
函数2:axes.plot(),这是axes类的基本方法,它将一个数组的值与另一个数组的值以线或标记的形式绘制出来。plot()方法可以有一个可选的格式字符串参数来指定线条和标记的颜色、样式和大小。
axes.plot()
例1:
import matplotlib.pyplot as plt
import numpy as np
x = np.arange(20)
fig = plt.figure()
ax = plt.subplot(111)
for i in range(4):
ax.plot(x, i * x, label='$y = %ix$' % i)
ax.legend(loc=0)
plt.show()
显示结果如下,loc为0,系统默认会选择一个最好的位置,label为这些图例的内容
例2:
import matplotlib.pyplot as plt
y = [1, 4, 9, 16, 25,36,49, 64]
x1 = [1, 16, 30, 42,55, 68, 77,88]
x2 = [1,6,12,18,28, 40, 52, 65]
fig = plt.figure()
ax = fig.add_axes([0,0,1,1])
l1 = ax.plot(x1,y,'ys-') # solid line with yellow colour and square marker
l2 = ax.plot(x2,y,'go--') # dash line with green colour and circle marker
ax.legend(labels = ('tv', 'Smartphone'), loc = 'lower right') # legend placed at lower right
ax.set_title("Advertisement effect on sales")
ax.set_xlabel('medium')
ax.set_ylabel('sales')
plt.show()
显示结果如下:
在matplotlib中,有两种画图模式:
一种是plt.系列,这个plt.提供了一些基本的函数,可以画一些简单的图,如果你想要精细的画图,这种画图模式就不得行了。于是,有了第二种方法。
另一种是fig,ax = plt.subplots(),这种是通过axes来画的,通过指定figure和axes,对axes进行单独操作。建议画图都用这种。
为了更好的说明我们的参数和图的对应关系,见下图:(点此查看官网解释)
下面看官网对上图的整体解释:
整个人物(标记为外红框)。图中记录了所有的子Axes、少量的 "特殊 "艺术家(标题、图例等)和画布。不要太担心画布,它是至关重要的,因为它是实际做画的对象,让你得到你的剧情,但作为用户,它对你来说多少是看不见的)。一个图形可以有任何数量的Axes,但为了有用,至少应该有一个。
通俗解释: 红外框的就是画布,要在画布上进行创作,这个画布上可以有一定数量的Axes,就是图中蓝色线框住的部分,你需要在这个画布上画多少图,那么就需要有多少个Axes,比如,如果你的figure有subplot,也就是子图的画,每个子图就是一个Axes。
官网对上图中的Axes的解释:
这就是你所认为的 “一个图”,它是图像中具有数据空间的区域(标记为蓝色内框)。一个给定的图可以包含许多Axes,但一个给定的Axes对象只能在一个图中。Axes包含两个(如果是3D,则是三个)Axis对象(要注意Axes和Axis之间的区别),它负责数据的限制(数据限制也可以通过set_xlim()和set_ylim()Axes方法来控制)。每个Axes都有一个标题(通过set_title()设置),一个x-label(通过set_xlabel()设置)和一个y-label(通过set_ylabel()设置)。
**通俗解释:**就是Axes很吊,可以修改设置的变量非常多。
官网对上图中Axis的解释:
这些是类似数字线的对象(绿色圈出)。它们负责设置图形限制和生成tick(轴上的标记)和ticklabels(标记tick的字符串)。标记的位置由Locator对象决定,ticklabel字符串由Formatter格式化。正确的Locator和Formatter的组合可以对tick位置和标签进行非常精细的控制。
通俗解释: Axis,为图中绿色圈出的坐标轴部分,这部分可以进行精细的修改和调整。比如用ax.xaxis和ax.yaxis调整坐标轴。
官网也对Figure对分进行了精细的名称定位,方便修改官网见此。如下图所示:
上图给出了各个部分的名称,也可以说是关键字,方便我们查询调整。