【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