⼀个画布有多个⼦图_Matplotlib+Pandas:⼦图创建
为了能够更好的进⾏数据对⽐分析,有时需要将⼏个可视化图表进⾏对⽐显⽰。这时,就会⽤到该篇讲述的基于不同⽅式的⼦图创建过程。
知识点:
Matplotlib中,⼀幅可视化图像被称为⼀个Figure;matplotlib中subplot
Figure中包含⼀个或多个Axes;
每⼀个Axes均是⼀个含有各⾃坐标系的绘图区域;
两种⼦图的创建⽅式。
Figure
绘图对象plt.figure( )中包含的参数如下:
plt.figure(num=None,
figsize=None,
dpi=None,
facecolor=None,
edgecolor=None,
frameon=True,
FigureClass=<class 'matplotlib.figure.Figure'>,
**kwargs)
其中,参数num⽤于给Figure编号,参数figsize⽤于给Figure设置长宽。
注:当调⽤plot时,若设置plt.figure( ),Matplotlib会⾃动调⽤figure( )⽣成⼀个Figure对象。 严格讲,这个过程是⽣成了⼀个注:
subplots(111),后续会讲到。
fig1 = plt.figure(num=1,figsize=(4,3))
plt.plot(np.random.rand(30).cumsum(),'g-.')
fig2 = plt.figure(num=1,figsize=(5,3))
plt.plot(np.random.rand(40).cumsum(),'r--')
fig1和fig2中Figure的编号参数num相同时,分别plot的图像会在⼀个Figure中展⽰。
只有当编号不同(或者为默认值)时,fig1和fig2才会在不同的Figure中展⽰。
⼦图创建-⽅式⼀:先建⽴⼦图再构建你想要的绘制⼦图的Axes区域,再填充可视化图表fig = plt.figure(figsize=(10,6),facecolor='#F0E68C')  # 创建⼀个Figure
# 利⽤add_subplot()⽣成⼦图,创建⼦图后,会从第⼀个绘制到最后⼀个
# (2,2,1)表⽰创建了⼀个2*2的4个⼦图(Axes)区域,顺序依次为从左到右从上到下
ax1 = fig.add_subplot(2,2,1)  # 第⼀⾏左图
plt.plot(np.random.rand(30).cumsum(),'g-.')
plt.plot(np.random.rand(40).cumsum(),'r--')
ax2 = fig.add_subplot(2,2,3)  # 第⼆⾏左图,啥也没画
ax3 = fig.add_subplot(2,2,4)  # 第⼆⾏右图
# 也可以在⼦图中调⽤绘图函数进⾏绘制
ax3.scatter(np.random.rand(20),np.random.rand(20).cumsum())
⼦图创建-⽅式⼆:创建figure,并⼀次性建⽴所有⼦图Axes,再去不同⼦图Axes区域进⾏图像填充
fig,axes = plt.subplots(2,3,figsize=(12,4))  # 不管是否填充⼦图区域,⼀次性将所有⼦图Axes构建完成
ax1 = axes[0,1]  # 从左到右从上到下,按照矩阵形式去对应位置
ax1.plot(pd.Series(np.random.randn(1000).cumsum()))
ax2 = axes[1,2]
ax2.plot(pd.DataFrame(np.random.randn(30,2),columns=['A','B']))
ax3 = axes[1,0]
data = pd.DataFrame(np.random.randn(30,2),columns=['A','B'])
ax3.scatter(data['A'],data['B'])
注:⽅式⼀与⽅式⼆在数⼦图Axes在整个Figure中的位置时⼀定要注意,会有些许区别,⼀个从1编号,⼀个从0编号!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。