五、子圖

 

In [ ]:
"""
在matplotlib中,整個圖像爲一個Figure對象
在Figure對象中能夠包含一個或者多個Axes對象
每一個Axes(ax)對象都是一個擁有本身座標系統的繪圖區域

plt.figure, plt.subplot
"""
In [1]:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
In [4]:
# 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=(6,2))
plt.plot(np.random.rand(50).cumsum(),'k--')

plt.plot(50-np.random.rand(50).cumsum(),'k--')
# num:圖表序號,能夠試試不寫或都爲同一個數字的狀況,圖表如何顯示
# figsize:圖表大小

# 當咱們調用plot時,若是自動設置plt.figure(),則會自動調用figure()生成一個figure, 嚴格的講,是生成subplots(111)
Out[4]:
[<matplotlib.lines.Line2D at 0x22c02c56668>]
 
 
In [40]:
# 子圖建立1 - 先創建子圖而後填充圖表

fig = plt.figure(figsize=(10,6),facecolor = 'gray')

ax1 = fig.add_subplot(2,2,1)  # 第一行的左圖
plt.plot(np.random.rand(50).cumsum(),'k--')
plt.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='.')
ax4.legend('upper right')

df2.plot(alpha=0.5,linestyle='--',marker='.')
plt.legend('upper right')

# 也能夠直接在子圖後用圖表建立函數直接生成圖表
Out[40]:
<matplotlib.legend.Legend at 0x22c09c4f0b8>
 
 
In [ ]:
 
In [54]:
# 子圖建立2 - 建立一個新的figure,並返回一個subplot對象的numpy數組 → plt.subplot

fig,axes = plt.subplots(2,3,figsize=(10,4),sharex=False,sharey=False)
ts = pd.Series(np.random.randn(1000).cumsum())
# 生成圖表對象的數組

ax1 = axes[1,1]     # 一行,直接【i】,多行【i,j】
ax1.plot(ts)



fig.subplots_adjust(wspace=0.5,hspace=0.5)   # 用於控制寬度和高度的百分比,好比subplot之間的間距
 
In [63]:
# 子圖建立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,2),
       sharex = False
       )
plt.subplots_adjust(wspace=0.2,hspace=0.4)
# plt.plot()基本圖表繪製函數 → subplots,是否分別繪製系列(子圖)
# layout:繪製子圖矩陣,按順序填充
 
In [ ]:
相關文章
相關標籤/搜索