4.Matplotlib多⼦图,⽂字和注释以及⾃定义坐标轴
⽂章⽬录
Matplotlib绘制多⼦图,⽂字和注释以及⾃定义坐标轴刻度
本节将讲解Matplotlib绘制多⼦图,⽂字和注释以及⾃定义坐标轴刻度等内容
多⼦图
我们在⼀个Figure对象上创建Axes对象最基本的⽅法就是使⽤plt.axes()函数
这个函数默认配置将会创建⼀个标准的⼦图,将会填满整张图
plt.axes()
plt.show()
⾃定义⼦图位置
实际上,plt.axes()函数可以接受⼀个含有四个数字的数组,⽤于确定⼦图的四条边的位置,按照[left,bottom,width,height]的顺序排列并且bottom和left的取值是以⼩数(百分⽐表⽰),左下⾓作为原点为0,右上⾓为1
下⾯我们将创建⼀个画中画
plt.axes()
plt.axes([0.65,0.65,0.2,0.2])
matplotlib中subplot
plt.show()
这⾥我们指定底边和左边在65%的位置,宽度和⾼度均为20%
得到图像
⾯向对象接⼝中Axes对象实际上作为Figure对象的底层对象(即Figure对象可以容纳Axes对象),我们只需要调⽤Figure对象的add_axes()⽅法来添加⼦图
Fig=plt.figure()
Fig.add_axes([0.1,0.1,0.8,0.8])
Fig.add_axes([0.65,0.65,0.2,0.2])
plt.show()
⽹格多⼦图
为了对⽐多个图像,我们通常在⼀个Figure对象中创建多个Axes对象,分别绘制不同的图线
为此,我们就需要创建⽹格多⼦图,创建⽹格多⼦图有两种⽅式,第⼀种是通过plt.subplot循环创建,另外⼀种就是通过plt.subplots直接创建plt.subplot() / add_subplot⽅法循环创建
plt.subplot()函数和Figure对象的add_subplots⽅法⼀次只能创建⼀个⽹格⼦图,所以我们需要通过循环的⽅式来创建
for i in range(1,7):
plt.subplot(2,3,i)
<(0.5,0.5,str((2,3,i)),fontsize=18,ha='center')
plt.show()
这⾥我们使⽤默认情况来创建完图像后,每个图像之间的分布其实并不是最佳的,为此我们可以调⽤plt.subplots_adjust来调整⼦图之间的间隔
我们指定plt.subplots_adjust的hspace和wspace来分别指定所有⼦图之间的纵向与横向间距
for i in range(1,7):
plt.subplot(2,3,i)
<(0.5,0.5,str((2,3,i)),fontsize=18,ha='center')
plt.subplots_adjust(hspace=0.4,wspace=0.4)
plt.show()
plt.subplots()直接创建
实际上我们可以直接使⽤plt.subplots()⼀⾏代码来直接创建⽹格图
⽽且如果使⽤第⼀种⽅法来循环创建⽹格图的话,每个⼦图都会有独⽴的坐标刻度,这样我们想让多张⼦图之间共享坐标就会⼗分困难因此,这种情况下使⽤plt.subplots()⾮常的⽅便,只需要指定sharex和sharey参数即可
Fig,Axes=plt.subplots(2,3,sharex='col',sharey='row')
plt.show()
我们通过plt.subplots()⽅式创建⽹格多⼦图后将会返回由⼦图作为元素的数组,该数组的形状和我们创建的⼦图形状⼀致
Fig,Axes=plt.subplots(2,3,sharex='col',sharey='row')
for i in range(2):
for j in range(3):
Axes[i,j].text(0.5,0.5,str((i,j)),fontsize=18,ha='center')
plt.show()
plt.GridSpec()创建不同形状多⼦图
⽆论是使⽤plt.subplot()还是plt.subplots()⽅法创建出来的,相互之间都是具有相同的规则形状
但是在实际情况下,我们可能需要不⾏形状的⼦图来显⽰不同的曲线
为此,我们可以使⽤plt.GridSpec()函数来创建不规则多⼦图
实际上plt.GridSpec()函数本⾝并不能创建⼦图,它是⼀个可以由plt.subplot来识别的接⼝.为了理解其作⽤,我们可以想象plt.GridSpec()创建了多个可以合并的⼦图(实际上并没有创建),接下来我们为plt.subplot()传⼊需要合并的⼦图,就能够成功创建不同形状的⼦图
Grid=plt.GridSpec(2,3,wspace=0.4,hspace=0.3)
plt.subplot(Grid[0,0])
plt.subplot(Grid[0,1:])
plt.subplot(Grid[1,:2])
plt.subplot(Grid[1,2])
plt.show()
不同形状⼦图表⽰多维数据
实际上我们通常使⽤不同形状的多⼦图⽤来表⽰多维数据
下⾯将以⼆维数据为例讲解如何使⽤不同形状⼦图来表⽰多维数据