close

【matplotlib】最快速建立多子圖並且使用df.plot快速指派的方法:使用subplots一步驟搞定

一、前言

在有時候在資料分析時想大概比較一下資料的狀況,這時候又不想用花太多時間在畫圖上,畢竟只是大概比較而已。

這時候subplots快速畫圖的兩種方法相信一定可以幫上您!我們就來看一下subplots到底如何運作吧!

 

方法一:使用plt.subplot(可以調的變數較多)

方法二:使用df.plot(subplots=True)真懶人法(可以調的變數較少)

 

 

二、使用subplots

方法一:使用plt.subplot(可以調的變數較多)

首先可以看到在指派變數時給予fig與ax,fig為圖紙,ax為子圖(此時的ax為放物件的list)。

4,1為這個圖為4*1網格的圖,有4個ROW,1個COLUMNS。

其他常用的的變數:tight_layout全版(放滿整fig)、sharex是否x軸一致、sharey是否y軸一致

fig, ax = plt.subplots(4,1,  figsize=(15,9), tight_layout=True, sharex='all', sharey='all') # tight_layout 全版

 

這時就可以使用df.plot()懶人畫圖法用其中的ax(df裡面的變數)指派。

剛剛說過變數ax(plt.subplots()的)為一個list,這時只要用ax[]裡面放數字就可以指派到子圖裡面。

這邊注意,如果你的subplots欄數不為一,例如plt.subplots(4,2)那麼指派時要用ax[row][col]來指派,不能只用a[row]。

df['Open'].plot(y='Close', grid=True, ax=ax[0], kind='line') # ax為一list 用ax[]來指定子圖並放在ax變數中
df['High'].plot(y='Close', grid=True, ax=ax[1], kind='scatter')
df['Low'].plot(y='Close', grid=True, ax=ax[2], kind='line')
df['Close'].plot(y='Close', grid=True, ax=ax[3], kind='scatter')

 

 

完整程式碼

import pandas, numpy
import matplotlib.pyplot as plt
import datetime
import twstock


def get_stock(symbol):
    # 取得證交所股票data
    stock = twstock.Stock(symbol)
    symbol = stock.sid # 回傳股票代號
    date = stock.date # 時間
    open = stock.open # 開
    high = stock.high # 高
    low = stock.low # 低
    close = stock.price # 收    
    # 轉成DataFrame
    data = {'Open': open, 
            'High': high, 
            'Low': low, 
            'Close': close}
    df = pandas.DataFrame(data, index=date)
    return df


symbol = '2330'

df = get_stock(symbol)


# plot
fig, ax = plt.subplots(4,1,  figsize=(15,9), tight_layout=True, sharex='all', sharey='all') # tight_layout 全版

df['Open'].plot(y='Close', grid=True, ax=ax[0], kind='line') # ax為一list 用ax[]來指定子圖並放在ax變數中
df['High'].plot(y='Close', grid=True, ax=ax[1], kind='scatter')
df['Low'].plot(y='Close', grid=True, ax=ax[2], kind='line')
df['Close'].plot(y='Close', grid=True, ax=ax[3], kind='scatter')

 

方法二:使用df.plot(subplots=True)真懶人法(可以調的變數較少)

如果df有多個欄位一句指令即可。很方便,但可以調的變數就df.plot裡面的變數,且顯示出來的圖規格一致,自由性較低。

你會發現畫出來的圖子圖為df裡面欄位的數量,且由上至往下排列又不能單獨控制ax子圖。

(先前有大概試過好像不太行,如果可以還請大家跟我分享~)

df.plot(subplots=True)

 

 

三、後記

大家matplotlib是一個非常好用的套件,但卻有很多眉眉角角,大家還有遇上什麼問題可以留言給我唷!

或是想看怎麼樣主題式的文章也歡迎留言給我,近期太忙了,所以挑大家比較會遇到的問題寫~

 

還不知道怎麼學python或基礎不穩的可以看:

其他更多matplotlib教學:https://pixnashpython.pixnet.net/blog/category/465980

arrow
arrow

    恩哥Python 發表在 痞客邦 留言(0) 人氣()