将各个图形绘制在一张画布中,并以矩阵的形式进行排列,就形成了矩阵子图。子图可以帮我们更方便地对比各数据变化趋势。
# 子图创建方式一subplot(nrows,ncols,index,projection,sharex,sharey)作用:创建子图。返回值:坐标轴对象。参数:nrows--行数;ncols--列数;index--子图序号;projection--坐标系,默认为直角坐标系,设置为'polar'为极坐标系;sharex、sharey--设置各子图间相同的x轴、y轴刻度。说明:1.上述参数均可缺省,即仅获得坐标轴对象;2.行数、列数、序号之间的逗号可省略,例如subplot(2,1,1)等同于subplot(211)。
# 子图创建方式二subplots(nrows,ncols,sharex,sharey)作用:创建布局好的矩阵子图。返回值:fig,ax。参数:nrows--行数;ncols--列数;sharex--是否共享X轴;默认False不共享,设置为True则共享;sharey--是否共享Y轴,默认False不共享,设置为True则共享;
# 子图创建方式三fig=plt.figure()fig.add_subplot()说明:上述函数与subplot()函数参数及意义相同。
# 子图之间间距调整subplots_adjust(left,bottom,right,top,wspace,hspace)作用:调整子图间距。参数:left--图形到左边缘距离;bottom--图形到下边缘距离;right--图形到右边缘距离;top--图形到上边缘距离;wspace--各子图间横向间距;hspace--各子图间纵向间距;
在绘制子图矩阵时,有时各子图内容之间会出现部分重叠的现象,因此常常需要对各子图之间的间距进行调整,使内容能够较好地呈现。
import matplotlib.pyplot as plt# 数据x = [1, 2, 3, 4]apple = [1, 4, 9, 16]orange = [1, 8, 27, 64]banana = [1, 16, 54, 128]watermelon = [2, 23, 67, 100]plt.rc('font', family='STSong')fig, ax = plt.subplots(2,2,sharex=True)# 子图1ax[0,0].scatter(x, apple, c='blue')ax[0,0].set_ylabel('苹果产量')# 子图2ax[0,1].scatter(x, orange, c='cyan')ax[0,1].set_ylabel('橘子产量')# 子图3ax[1,0].scatter(x, banana, c='red')ax[1,0].set_ylabel('香蕉产量')ax[1,0].set_xlabel('年限')# 子图4ax[1,1].scatter(x, watermelon,c='lime')ax[1,1].set_ylabel('西瓜产量')ax[1,1].set_xlabel('年限')# 子图间距调整plt.subplots_adjust(wspace=0.3)plt.show()
import matplotlib.pyplot as plt# 数据year = [1, 2, 3, 4]apple = [1, 4, 9, 16]orange = [1, 8, 27, 64]banana = [1, 16, 54, 80]fig = plt.figure()plt.rc('font', family='STSong')# 子图1ax1 = fig.add_subplot(311)ax1.plot(year, apple, 'o-', c='blue')ax1.set_title('各水果产量与年限的关系')ax1.xaxis.set_major_locator(plt.NullLocator())ax1.set_ylabel('苹果产量')# 子图2ax2 = fig.add_subplot(312,sharex=ax1)ax2.plot(year, orange, 'o-', c='cyan')ax2.set_ylabel('橘子产量')# 子图3ax3 = fig.add_subplot(313)ax3.plot(year, banana, 'o-', c='red')ax3.set_ylabel('香蕉产量')ax3.set_xlabel('年限')# 子图间距调整plt.subplots_adjust(hspace=1.0)plt.tight_layout()plt.show()