close

【matplotlib】df快速畫出精美表格的兩種常用方法:df.plot(table=True)及ax.table

一、前言

想快速畫出matplotlib中的table有兩種方法,也是目前最好用的兩種方法。

我們來看看這兩種方法的差異及效果,其中我又把它分成table正常版及table快速版。

方法一:table正常版(適合圖顯示全部但table只想最近幾次):就是可以調的參數較多的意思

              (時機:通常是帶有時間序列的dataframe)

方法二:table快速版:資料不能自己指派df裡面是啥就顯示啥

              (時機:通常為hist等已經統計好的df,row及col較少的狀況下)

 

 

二、快速畫table的兩種方法

方法一:table正常版

很簡單的一個想法就是,圖直接照畫,表格另外用ax.table另外給。

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(1,1,  figsize=(15,9), tight_layout=True) # tight_layout 全版


df['Close'].plot(y='Close', grid=True, ax=ax, kind='line')

table_data = df.copy()
table_data = df[-5:]#.reset_index()


table = ax.table(cellText=table_data.values, 
          colLabels=table_data.columns, 
          rowLabels=table_data.index,
          )


# 表格設定
table.auto_set_font_size(False) # 是否自動貼合
table.set_fontsize(5) # 表格大小


# ax設定
ax.xaxis.tick_top()
ax.xaxis.set_label_position('top')
ax.set_title(symbol)


設定要另外給的data table_data = df.copy(),table_data = df[-5:] # 只要最近五天。

這部分也很簡單,cellText給資料,colLabels給欄位,rowLabels給index。


# 表格設定
table.auto_set_font_size(False) # 是否自動貼合
table.set_fontsize(5) # 表格大小


# ax設定
ax.xaxis.tick_top() x軸移到最上面
ax.xaxis.set_label_position('top') x軸標籤移到最上面
ax.set_title(symbol) 給予title名稱

 

方法二:table快速版

get_stock方法同上(可以自己去貼過來用、套件也同上)。

這邊看到更簡潔了,但同時可以變動的參數也變少了,又因為表格大小會全部取自df所以這邊取得最近5天就好。df = get_stock(symbol).iloc[-5:]

其核心就是要在df.plot時給予 table=True,且在下面使用 table = ax.tables[0]取得物件來做編輯。

其中 ax.tables[0]意義我還不太清楚,但是基本上這樣給就可以了。

df = get_stock(symbol).iloc[-5:]


# plot

ax = df.plot(grid=True, kind='line', table=True, figsize=(15,8)) # 快速建立表格table給予True

table = ax.tables[0] # 取得表格物件方便之後修改(之後用table變數控制)

# 表格設定
table.auto_set_font_size(False) # 是否自動貼合
table.set_fontsize(10) # 表格大小


# ax設定
ax.xaxis.tick_top()
ax.xaxis.set_label_position('top')
ax.set_title(symbol)


 

 

三、後記

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

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

 

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

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

 

arrow
arrow

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