Python數(shù)據(jù)展示之生成表格圖片
前言:
本文來講講如何用Python生成表格圖片。
選一個合適庫
Python最大的優(yōu)點就是第三方庫豐富,基本你要什么功能,都能找到別人實現(xiàn)好的庫,幾行代碼一調(diào)用就完事了。
Pytable
最先找到的是日本人開發(fā)的pytab庫,它是基于 matplotlib 來畫圖的,默認(rèn)參數(shù)下生成的表格外觀一般般,而且顯示不了中文字符,字體也很小,效果不理想。
我一開始還抱著死磕的心態(tài),把這個庫的源碼下載下來魔改,改了字體和大小,生成的表格終于能看了,但排版還是會出各種奇奇怪怪的問題,比如文字溢出單元格之類的,心累……
Plotly:官網(wǎng)地址
后面找到了一個新的庫:plotly,
官網(wǎng)的介紹是:
專門為機器學(xué)習(xí)和數(shù)據(jù)科學(xué)設(shè)計的前端展示工具,單純拿來畫表格還算大材小用了~ 它是用網(wǎng)頁來渲染的,看例子效果還可以,我就換成這個plotly試試,嗯,真的可以,那就這個了。
本文會分別介紹這兩個庫的使用,包括我魔改了pytab的地方。
(不過還是推薦plotly,網(wǎng)頁渲染就是好)
pytab
首先安裝
pip install pytab
然后我把畫表格的代碼封裝成一個函數(shù)
import uuid from typing import List, Dict, Optional, Tuple import pytab def draw_table(data: Dict[str, list]): ? ? """ ? ? 畫表格 ? ? :param data: 數(shù)據(jù)格式 { ? ? ? ? 'a': [1.0, 2.1, 3.5, 4.0, 2.0, 1.0, 2.1, 3.5, 4.0, 2.0, ], ? ? ? ? 'b': [5.7, 6.1, 7.2, 8.3, 1.2, 5.7, 6.1, 7.2, 8.3, 1.2, ], ? ? ? ? } ? ? :return: ? ? """ ? ? # 設(shè)置字體,不然顯示不了中文 ? ? pytab.plt.rcParams["font.sans-serif"] = ["SimHei"] ? ? pytab.table(? ? ? ? ? data=data, ? ? ? ? data_loc='center', ? ? ? ? # th_type='dark', ? ? ? ? th_c='#aaaaee', ?# 設(shè)置表頭背景顏色 ? ? ? ? td_c='gray', ?# 設(shè)置數(shù)據(jù)行背景顏色 ? ? ? ? table_type='striped', ? ? ? ? figsize=(len(data.keys()), int(len(data.values()) / len(data.keys()) + 1)), ? ? ? ? # fontsize=18, ? ? ) ? ? # pytab.show() ? ? temp_file = os.path.join(tempfile.gettempdir(), f'{uuid.uuid4().hex}.jpg') ? ? print(temp_file) ? ? pytab.save(temp_file) ? ? return temp_file
按照注釋的這個數(shù)據(jù)格式,a和b是表頭列名,后面的數(shù)組是每一列的數(shù)據(jù),很好理解
{ ? ? 'a': [1.0, 2.1, 3.5, 4.0, 2.0, 1.0, 2.1, 3.5, 4.0, 2.0, ], ? ? 'b': [5.7, 6.1, 7.2, 8.3, 1.2, 5.7, 6.1, 7.2, 8.3, 1.2, ], }
畫出來的表格是這樣的
再來試試中文顯示會怎么樣
{ ? ? '列1': [1.0, 2.1, 3.5, 4.0, 2.0, 1.0, 2.1, 3.5, 4.0, 2.0, ], ? ? '列2': [5.7, 6.1, 7.2, 8.3, 1.2, 5.7, 6.1, 7.2, 8.3, 1.2, ], }
畫出來是這樣
有點丑吧,勉強能看
OK~ 關(guān)于pytab的就不多折騰了,畢竟上限就在這了
接下來看看plotly
plotly
首先安裝
pip install plotly
話不多說,老規(guī)矩,我又是寫成一個函數(shù)
import uuid from typing import List, Dict, Optional, Tuple import plotly.graph_objects as go import plotly.io as pio def draw_table(headers: List[str], cells: List[list]): ? ? """ ? ? 畫表 ? ? :param headers: header=dict(values=['A Scores', 'B Scores']) ? ? :param cells: cells=dict(values=[[100, 90, 80, 90], [95, 85, 75, 95]]) ? ? :return: ? ? """ ? ? pio.kaleido.scope.default_width = len(','.join(headers)) * 20 ? ? pio.kaleido.scope.default_height = 250 + len(cells[0]) * 20 ? ? fig = go.Figure(data=[go.Table(header=dict(values=headers), cells=dict(values=cells))]) ? ? # fig.show() ? ? image_file = os.path.join(tempfile.gettempdir(), f'{uuid.uuid4().hex}.jpg') ? ? print('write image to', image_file) ? ? fig.write_image(image_file) ? ? return image_file
這次的參數(shù)格式更前面的pytab不一樣,要傳兩個參數(shù),都是數(shù)組類型
第一個是表頭,第二個數(shù)組是單元格
先來個例子試試
draw_table(['列A', '列B'], [[100, 90, 80, 90], [95, 85, 75, 95]])
然后把上面函數(shù)代碼里的 fig.show()
注釋去掉,可以看到生成的表格圖片效果
運行后可以發(fā)現(xiàn)自動打開了瀏覽器,因為這個庫是使用網(wǎng)頁來渲染表格的,
效果如下:
效果比前面那個pytab好一些
到此這篇關(guān)于Python數(shù)據(jù)展示之生成表格圖片的文章就介紹到這了,更多相關(guān)Python生成表格圖片內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
修復(fù)python-memcached在python3.8環(huán)境中報SyntaxWarning的問題(完美解決)
我們一直使用python-memcached庫來操作memcached,最近發(fā)現(xiàn)在python3.8的環(huán)境中,代碼會報錯,下面通過本文給大家講解修復(fù)python-memcached在python3.8環(huán)境中報SyntaxWarning的問題及解決方法,需要的朋友可以參考下2022-08-08macbook如何徹底刪除python的實現(xiàn)方法
本文主要介紹了macbook如何徹底刪除python的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07