1. 程式人生 > >Python資料視覺化matplotlib(二)—— 子圖功能

Python資料視覺化matplotlib(二)—— 子圖功能

Python資料視覺化matplotlib(二)—— 子圖功能

在matplotlib中,整個影象為一個Figure物件,在Figure物件中可以包含一個或者多個Axes物件,每個Axes(ax)物件都是一個擁有自己座標系統的繪圖區域

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt   
import matplotlib
matplotlib.style.use('bmh')

plt.figure() 建立繪圖物件

# plt.figure()  繪圖物件
# plt.figure(num=None, figsize=None, dpi=None, facecolor=None, edgecolor=None, frameon=True, 
# FigureClass=<class 'matplotlib.figure.Figure'>, clear=False, **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(np.random.randint(1,11,size=5).cumprod(),'-.g'
) # num:圖表序號,可以試試不寫或都為同一個數字的情況,圖表如何顯示 # figsize:圖表大小 # 當我們呼叫plot時,如果設定plt.figure(), # 則會自動呼叫figure()生成一個figure, 嚴格的講,是生成subplots(111)

這裡寫圖片描述
這裡寫圖片描述

子圖建立

先建立子圖,後一次填充其他子圖

# 子圖建立1 - 先建立子圖然後一次填充其他子圖


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

ax1 = fig.add_subplot(2,2,1)  # 建立一個圖表,該圖在2行2列的子圖中的第一個位置,即一行左圖
plt.plot(np.random.rand(50).cumsum(),'--g') ax4 = fig.add_subplot(2,2,4) #建立一個圖表,位於2行2列,即二行右圖 ax4.hist(np.random.rand(50).cumsum(),alpha=0.5,color='b') # 先建立圖表figure,然後生成子圖,(2,2,1)代表建立2*2的矩陣表格,然後選擇第一個,順序是從左到右從上到下 # 建立子圖後繪製圖表,繪製到最後一個子圖 ax2 = fig.add_subplot(2,2,2) df2 = pd.DataFrame(np.random.rand(10,4), columns=['a','b','c','d']) ax2.plot(df2, linestyle='--',marker='.') # 也可以直接在子圖後用圖表建立函式直接生成圖表

這裡寫圖片描述

先建立一個figure,後填充子圖

# 子圖建立2 - 建立一個新的figure,並返回一個subplot物件的numpy陣列 → plt.subplot

fig,axes = plt.subplots(2,3,figsize=(10,4))
print(type(fig), '\n', type(axes)) 

ax1=axes[0, 1]
ax1.plot(np.random.rand(100))

ax2 = axes[1,2]
ax2.plot(np.random.randint(10,size=10).cumsum(),'--')

這裡寫圖片描述

plt.subplot()引數調整

# plt.subplot()引數調整

fig,axes = plt.subplots(2,2,figsize=(6,4),
                       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='b', alpha=0.8) 
# 利用迴圈來填充資料

plt.subplots_adjust(wspace=0, hspace=0.1)
# wspace,hspace:用於控制寬度和高度的百分比,比如subplot之間的間距

這裡寫圖片描述

# 子圖建立3 - 多系列圖,分別繪製

df = pd.DataFrame(np.random.randn(1000, 4), columns=list('ABCD'))
df = df.cumsum()

df.plot(style ='--', alpha=0.5, grid=True,figsize=(8,6),
       subplots = True,
       layout=(2, 2))
plt.subplots_adjust(wspace=0,hspace=0.2)
# plt.plot()基本圖表繪製函式 → subplots,是否分別繪製系列(子圖)
# layout:繪製子圖矩陣,按順序填充

這裡寫圖片描述