【課程3.5】 子圖
在matplotlib中,整個圖像爲一個Figure對象
在Figure對象中可以包含一個或者多個Axes對象
每個Axes(ax)對象都是一個擁有自己座標系統的繪圖區域
plt.figure, plt.subplot
1.plt.figure() 繪圖對象
# plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None,
# frameon=True, FigureClass=<class 'matplotlib.figure.Figure'>, **kwargs)
fig1 = plt.figure(num=1,figsize=(4,2))
plt.plot(np.random.rand(50).cumsum(),'k--')
fig2 = plt.figure(num=2,figsize=(4,2))
plt.plot(50-np.random.rand(50).cumsum(),'k--')
# num:圖表序號,可以試試不寫或都爲同一個數字的情況,圖表如何顯示
# figsize:圖表大小
# 當我們調用plot時,如果設置plt.figure(),則會自動調用figure()生成一個figure, 嚴格的講,是生成subplots(111)
2.子圖創建1 - 建立子圖填充圖表
fig = plt.figure(figsize=(10,6),facecolor = 'gray')
ax1 = fig.add_subplot(2,2,1) # 第一行的左圖
ax1 .plot(np.random.rand(50).cumsum(),'k--')
ax1 .plot(np.random.randn(50).cumsum(),'b--')
# 先創建圖表figure,然後生成子圖,(2,2,1)代表創建2*2的矩陣表格,然後選擇第一個,順序是從左到右從上到下
# 創建子圖後繪製圖表,會繪製到最後一個子圖
ax2 = fig.add_subplot(2,2,2) # 第一行的右圖
ax2.hist(np.random.rand(50),alpha=0.5)
ax4 = fig.add_subplot(2,2,4) # 第二行的右圖
df2= = pd.DataFrame(np.random.rand(10, 4), columns=['a', 'b', 'c', 'd'])
ax4.plot(df2=,alpha=0.5,linestyle='--',marker='.')
# 也可以直接在子圖後用圖表創建函數直接生成圖表
3.子圖創建2 - 創建一個新的figure,並返回一個subplot對象的numpy數組 → plt.subplot
fig,axes = plt.subplots(2,3,figsize=(10,4))
ts = pd.Series(np.random.randn(1000).cumsum())
print(axes, axes.shape, type(axes))
# 生成圖表對象的數組
axes[0,1].plot(ts)
4.plt.subplots,參數調整
fig,axes = plt.subplots(2,2,sharex=True,sharey=True)
# sharex,sharey:是否共享x,y刻度
for i in range(2):
for j in range(2):
axes[i,j].hist(np.random.randn(500),color='k',alpha=0.5)
plt.subplots_adjust(wspace=0,hspace=0)
# wspace,hspace:用於控制寬度和高度的百分比,比如subplot之間的間距
5.子圖創建3 - 多系列圖,分別繪製
df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index, columns=list('ABCD'))
df = df.cumsum()
df.plot(style = '--.',alpha = 0.4,grid = True,figsize = (8,8),
subplots = True,
layout = (2,3),
sharex = False)
plt.subplots_adjust(wspace=0,hspace=0.2)
# plt.plot()基本圖表繪製函數 → subplots,是否分別繪製系列(子圖)
# layout:繪製子圖矩陣,按順序填充