文章首发于我的个人博客:欢迎大佬们来逛逛
本文基础:
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(-10,10,1000)
ys = np.sin(x)
yc = np.cos(x)
figure:画图板
figure在matplotlib中代表画图板的意思,是最基本的画图单位。
通过 figure()
函数可以创建一个新的画图板或者激活一个已经存在的。
例如下面的代码,我们创建了两个画图板,一个是f1,另一个是f2,但是其实在之后的绘制的时候和画图板的名字无关,它遵循就进原则,即创建一个画图板之后,则其下方绘制的一切都是属于上面的最近的画图板的。
f1 = plt.figure(1,figsize=[6,2])
plt.plot(x,ys)
f2 = plt.figure(2,figsize=(4,2))
plt.plot(x,yc)
f1.suptitle('figure 1')
f2.suptitle('figure 2')
上面我们是创建了两个新的画图板,然后分别绘制:
如果我们想要激活一个已经存在的,则我们再次指出即可:
注意:figure的参数第一个是名称,可以是数字,字符串等等,用于标识唯一的画图板的标题。
如下我们又重新激活了 一号画图板并且在其上绘图。
plt.figure(1) # 激活
plt.plot(x,yc)
我们只需要记住一句话即可:figure是最基本的绘图单位,存在则激活,不存在则创建,就近原则
plot:画布
plot有情节的意思。
我们有一个函数:subplot(x,y,p) ,它可以为我们新建画布
注意与上面的figure的区别,figure是画图板,我们需要在画图板上创建画布然后绘画,因此一个画图板上可以有多个画布,反之则不行。
如下:我们创建了一个画图板,然后又分别创建了三个画布,注意:在画布上的绘制也是遵循就近原则的。
fg = plt.figure(figsize=[8,2]) #创建一个画图板
plt.subplot(1,3,1) #画布1
plt.plot(x,ys,color='r')
plt.subplot(1,3,2) #画布2
plt.plot(x,ys,color='g')
plt.subplot(1,3,3) #画布3
plt.plot(x,ys,color='b')
那么subplot中的参数是什么意思呢?
我们可以把这三个数字分别从左往右读:(画图板:figure,画布:plot)
- 1 3 1:代表的就是把这个画图板分成一行三列,这个画布在第一个位置。
- 1 3 2:这个画布在第二个位置。
- 1 3 3:这个画布在第三个位置。
因此就可以明白了:画布依赖于画图板,画布的位置可以由这种方式来确定,实际上我们可以任意指定对画图板的划分。
axes:画布
axes有轴的意思。
它有一个函数:axes([x, y, w, h]),它可以为我们创建画布,对,这个函数和上面的 subplot功能是相同的,都是创建画布:
# 创建多个画图板
f1 = plt.figure('first')
# axes:在画图板上绘制区域 自定义位置,比较自由
fax1 = plt.axes((0,0,0.5,0.5))
plt.plot(x,ys)
fax2 = plt.axes((0.6,0,0.5,0.5))
plt.plot(x,ys)
plt.plot(x,yc) # 就近原则
fax3 = plt.axes([1.2,0,0.5,0.5])
plt.plot(x,ys)
注意到其与上面的 subplot
区别了吗?
axes()
的第一个参数接受一个序列:[x,y,w,h]
表示这个画布放置在相对于整个画图板(x,y)的位置,宽和高为 w 和 h 。
例如我们上面的例子中:
- (0,0,0.5,0.5):在画图板(0,0)的位置,宽度和高度为0.5和0.5
第二个画布:(0.6,0,0.5,0.5):在画图板(0.6,0)的位置,为什么x是06?
稍微变化以下参数你就明白了:
fax2 = plt.axes((0.4,0.2,0.5,0.5)) # 第二个变化
最左下角就是画图板的(0,0)的位置,往右是x轴正方向,往上是y轴正方向。
因此我们可以看出:axes() 创建画布的方式相对于 subplot() 更加灵活,因为你可以任意指定他们的位置,即使他们有重叠。
补充与示例
我们创建了两个画图板:
- 第一块板子使用 axes创建三个画布,然后分别绘制图形
- 第二个板子使用subplot创建三个画布,然后绘制:
# 创建多个画图板
f1 = plt.figure('first')
# axes:在画图板上绘制区域 自定义位置,比较自由
fax1 = plt.axes((0,0,0.5,0.5))
plt.plot(x,ys)
fax2 = plt.axes((0.6,0,0.5,0.5))
plt.plot(x,ys)
plt.plot(x,yc) # 就近原则
fax3 = plt.axes([1.2,0,0.5,0.5])
plt.plot(x,ys)
f2 = plt.figure('second',figsize=(8,2))
# subplot: 同样是绘制区域,是规整的
plt.subplot(1,3,1)
plt.plot(x,ys)
plt.subplot(1,3,2)
plt.plot(x,ys)
plt.subplot(1,3,3)
plt.plot(x,yc)
plt.plot(x,ys)
可以看到他们基本上是一样的,但是推荐使用subplot
,因为我们无须自已指定具体坐标。
axis() 可以指定某一个画布的具体显示区域。
如果我们只有一个画图板与一个画布,则默认是这样的设置
- 画图板的缺省是:figure(1)
- 图形区的缺省是:subplot(111)
规则描述:
- subplot()作用在最近使用的画图板上,有可能是缺省的画图板figure(1)。
- axes()作用在最近使用的画图板上,有可能是缺省的画图板figure(1)。
- axis()作用在最近使用的图形区上,可能来自subplot、axes等
- 绘制:plot()作用在最近使用的图形区上,可能来自subplot、axes等
参考文档:
matplotlib.pyplot.figure — Matplotlib 3.5.3 documentation