子图参数介绍
前面几篇文章介绍matplotlib.pyplot模块绘图都是绘制的单图,最多也是在同一个图上通过添加次坐标轴的形式把两个图像合并到一起。
但是如果想把几个单图整合在一个画布上面,就需要绘制子图,具体参数包括
1、划分画布的模块
根据行数*列数把一块画布划分为几块
2、用子图填充这些模块
划分为几块的画布,从左到右,从上到下的顺序排列序号
以下图为例,把图像划分为2*2四块,以及每个子图的位置从1-4排列顺序
如果想划分为上面两块,下面1块,那么上面两个子图就是2*2划分下的1号和2号;下面的子图就是2*1划分下的2号(上面两个子图占据了2*1下面的1号位置)
案例应用
细节调整方法
1、调整画布整体大小,如果画布比例尺过小的话,会导致子图覆盖严重且展示出来子图非常大(例如散点图拥挤的问题),出现这种情况就可以把画布尺寸调大
plt.figure(figsize=(10,10))
2、调整坐标轴文字角度,如果坐标轴文字很长可能在缩小到子图上之后出现覆盖,可以通过调整文字角度解决
plt.xticks(rotation=90)
3、子图之间可能会存在距离过大或者距离过小的情况,可以使用tight_layout()调整为最佳布局
plt.tight_layout()
4、pandas绘图,如果子图是使用pandas绘制的话,无法像matplotlib.pyplot模块绘图一样直接添加到子图里,需要用ax=plt.gca()参数标识
# 导入matplotlib库中的pyplot包,简写成plt
import matplotlib.pyplot as plt
# 显示中文标签
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.figure(figsize=(10,10))
data1=pd.read_csv('/Users/tinawang/Documents/python/书店图书销量和广告费用.csv',encoding='utf-8')
data2=pd.read_csv('/Users/tinawang/Documents/python/书店每月销量数据.csv',encoding='utf-8')
plt.subplot(2,2,1)
plt.plot(data2['month'],data2['sum'])
plt.xlabel('月份')
plt.ylabel('销量')
plt.title('销量趋势')
plt.xticks(rotation=90)
plt.tight_layout()
plt.subplot(2,2,2)
plt.scatter(data1['ads_fee'],data1['sales'])
plt.xlabel('广告费')
plt.ylabel('销量')
plt.title('广告费对销量的影响')
plt.subplot(2,1,2)
data2.plot.bar('month',['first_floor','second_floor','third_floor'],ax=plt.gca())
plt.xlabel('月份')
plt.ylabel('销量')
plt.title('不同楼层销量趋势')
plt.show()
效果如下图: