Python数据展示 - 生成表格图片
前言 前一篇文章介绍了推送信息到企业微信群里,其中一个项目推送的信息是使用Python自动生成的表格,本文来讲讲如何用Python生成表格图片。 选一个合适库 Python最大的优点就是第三方库丰富,基本你要什么功能,都能找到别人实现好的库,几行代码一调用就完事了。 Pytable 项目地址:https://github.com/HiroshiARAKI/pytable 最先找到的是日本人开发的p
目录7 个章节
前言
前一篇文章介绍了推送信息到企业微信群里,其中一个项目推送的信息是使用Python自动生成的表格,本文来讲讲如何用Python生成表格图片。
选一个合适库
Python最大的优点就是第三方库丰富,基本你要什么功能,都能找到别人实现好的库,几行代码一调用就完事了。
Pytable
项目地址:https://github.com/HiroshiARAKI/pytable
最先找到的是日本人开发的pytab库,它是基于matplotlib来画图的,默认参数下生成的表格外观一般般,而且显示不了中文字符,字体也很小,效果不理想。
我一开始还抱着死磕的心态,把这个库的源码下载下来魔改,改了字体和大小,生成的表格终于能看了,但排版还是会出各种奇奇怪怪的问题,比如文字溢出单元格之类的,心累……
Plotly
官网地址:https://plotly.com/
后面找到了一个新的库:plotly,官网的介绍是:
专门为机器学习和数据科学设计的前端展示工具,单纯拿来画表格还算大材小用了~ 它是用网页来渲染的,看例子效果还可以,我就换成这个plotly试试,嗯,真的可以,那就这个了。
本文会分别介绍这两个库的使用,包括我魔改了pytab的地方。
(不过还是推荐plotly,网页渲染就是好)
pytab
首先安装
pip install pytab
然后我把画表格的代码封装成一个函数
import uuid
from typing import List, Dict, Optional, Tuple
import pytab
def draw_table(data: Dict[str, list]):
"""
画表格
:param data: 数据格式 {
'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:
"""
# 设置字体,不然显示不了中文
pytab.plt.rcParams["font.sans-serif"] = ["SimHei"]
pytab.table(
data=data,
data_loc='center',
# th_type='dark',
th_c='#aaaaee', # 设置表头背景颜色
td_c='gray', # 设置数据行背景颜色
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
按照注释的这个数据格式,a和b是表头列名,后面的数组是每一列的数据,很好理解
{
'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~ 关于pytab的就不多折腾了,毕竟上限就在这了
接下来看看plotly
plotly
首先安装
pip install plotly
话不多说,老规矩,我又是写成一个函数
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
这次的参数格式更前面的pytab不一样,要传两个参数,都是数组类型
第一个是表头,第二个数组是单元格
先来个例子试试
draw_table(['列A', '列B'], [[100, 90, 80, 90], [95, 85, 75, 95]])
然后把上面函数代码里的fig.show()注释去掉,可以看到生成的表格图片效果
运行后可以发现自动打开了浏览器,因为这个库是使用网页来渲染表格的,效果如下

效果比前面那个pytab好一些,哈哈~
OK,就这样啦。
下次分享一些关于最近用Django开发后台的。
参考资料
- python用prettytable输出漂亮的表格:https://linuxops.org/blog/python/prettytable.html
- Plotly关于表格的文档:https://plotly.com/python/table/
- Plotly关于导出图片的文档:https://plotly.com/python/static-image-export/
- python将表格展示的数据生成图片:https://www.jianshu.com/p/3bfbf1bf0699
_EOF_
Python数据展示 - 生成表格图片
- 本文作者:
- 程序设计实验室
- 版权声明:
- 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
相关文章
配置pip国内镜像加快python第三方库安装速度~
现在这网络对于开发者来说有点不太友好,下载什么东西都慢慢,pip install慢,git clone也慢,难受…… 不过还好有各种代替的国内镜像源可以加速 临时配置 在使用pip的时候加参数-i https://pypi.tuna.tsinghua.edu.cn/simple 例如:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple d
2022-11-12 · Python · 约 1 分钟
Python-缓存机制与-functools-lru_cache
缓存是一种将定量数据加以保存以备迎合后续获取需求的处理方式,旨在加快数据获取的速度。数据的生成过程可能需要经过计算,规整,远程获取等操作,如果是同一份数据需要多次使用,每次都重新生成会大大浪费时间。所以,如果将计算或者远程请求等操作获得的数据缓存下来,会加快后续的数据获取需求。 先来一个简单的例子以了解缓存机制的概念: # -*- coding: utf-8 -*- import random
2022-05-27 · Python · 约 1 分钟
Python网络请求库,从 requests 到 httpx
Requests早该退休了,httpx这老古董才配活在异步时代?HTTP/2和超时?这些基本配置requests早该有。异步支持原生?别逗了,这年头谁还用同步。
2026-03-27 · Python · 约 1 分钟
后 Django 时代:SQLAlchemy 2.0、Tortoise 与 Piccolo 三大异步 ORM 选型指南
SQLAlchemy 2.0 才是工业级稳定,Alembic 迁移能力谁用谁知道。Tortoise ORM 是 Django 老玩家的舒适区,但灵活度有限。Piccolo 语法现代但生态太嫩,适合玩票。别再迷信 Stars,生产环境看的是谁扛造。
2026-04-10 · Python · 约 1 分钟
讨论
共 0 条加载评论中…